Browse Source

Merge pull request #9354 from abpframework/cms-kit/menu-management-patch

CmsKit - Add caching to MainMenu
pull/9382/head
Halil İbrahim Kalkan 5 years ago
committed by GitHub
parent
commit
7807864054
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  2. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs
  3. 7
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuApplicationConsts.cs
  4. 31
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs
  5. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  6. 35
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs

1
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs

@ -4,6 +4,7 @@ using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Menus
{
[Serializable]
public class MenuItemDto : AuditedEntityDto<Guid>
{
public Guid MenuId { get; set; }

2
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs

@ -7,10 +7,12 @@ using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Menus
{
[Serializable]
public class MenuWithDetailsDto : FullAuditedEntityDto<Guid>
{
public string Name { get; set; }
public bool IsMainMenu { get; set; }
public List<MenuItemDto> Items { get; set; }

7
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuApplicationConsts.cs

@ -0,0 +1,7 @@
namespace Volo.CmsKit.Menus
{
public static class MenuApplicationConsts
{
public static string MainMenuCacheKey = "MainMenu";
}
}

31
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs

@ -0,0 +1,31 @@
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.EventBus;
namespace Volo.CmsKit.Menus
{
public class MenuChangedHandler :
ILocalEventHandler<EntityUpdatedEventData<Menu>>,
ILocalEventHandler<EntityDeletedEventData<Menu>>,
ITransientDependency
{
protected IDistributedCache<MenuWithDetailsDto> DistributedCache { get; }
public MenuChangedHandler(IDistributedCache<MenuWithDetailsDto> distributedCache)
{
DistributedCache = distributedCache;
}
public Task HandleEventAsync(EntityUpdatedEventData<Menu> eventData)
{
return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey);
}
public Task HandleEventAsync(EntityDeletedEventData<Menu> eventData)
{
return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey);
}
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -1,7 +1,7 @@
{
"culture": "en",
"texts": {
"AddSubMenuItem": "New Sub-MenuItem",
"AddSubMenuItem": "Add Sub Menu Item",
"AreYouSure": "Are You Sure?",
"BlogDeletionConfirmationMessage": "The blog '{0}' will be deleted. Are you sure?",
"BlogFeatureNotAvailable": "This feature is not available now. Enable with 'GlobalFeatureManager' to use it.",

35
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs

@ -1,30 +1,45 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Public.Menus
{
{
[RequiresGlobalFeature(typeof(MenuFeature))]
public class MenuPublicAppService : CmsKitPublicAppServiceBase, IMenuPublicAppService
{
protected IMenuRepository MenuRepository { get; }
public MenuPublicAppService(IMenuRepository menuRepository)
protected IDistributedCache<MenuWithDetailsDto> DistributedCache { get; }
public MenuPublicAppService(
IMenuRepository menuRepository,
IDistributedCache<MenuWithDetailsDto> distributedCache)
{
MenuRepository = menuRepository;
DistributedCache = distributedCache;
}
public async Task<MenuWithDetailsDto> GetMainMenuAsync()
{
var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true);
var cachedMenu = await DistributedCache.GetOrAddAsync(
MenuApplicationConsts.MainMenuCacheKey,
async () =>
{
var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true);
if (menu == null)
{
return new MenuWithDetailsDto();
}
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
});
if (menu == null)
{
return null;
}
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
return cachedMenu;
}
}
}
Loading…
Cancel
Save