diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs index c6c054e5d7..633b9af1a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs +++ b/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 { public Guid MenuId { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs index 85cc6b431f..5a28bb22e6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs +++ b/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 { public string Name { get; set; } + public bool IsMainMenu { get; set; } public List Items { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuApplicationConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuApplicationConsts.cs new file mode 100644 index 0000000000..308680dd30 --- /dev/null +++ b/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"; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs new file mode 100644 index 0000000000..1bef58fd9d --- /dev/null +++ b/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>, + ILocalEventHandler>, + ITransientDependency + { + protected IDistributedCache DistributedCache { get; } + + public MenuChangedHandler(IDistributedCache distributedCache) + { + DistributedCache = distributedCache; + } + + public Task HandleEventAsync(EntityUpdatedEventData eventData) + { + return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); + } + + public Task HandleEventAsync(EntityDeletedEventData eventData) + { + return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd924289b..fc7a1884ef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/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.", diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs index 7e6989d0d6..891aec1e76 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs +++ b/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 DistributedCache { get; } + + public MenuPublicAppService( + IMenuRepository menuRepository, + IDistributedCache distributedCache) { MenuRepository = menuRepository; + DistributedCache = distributedCache; } - + public async Task 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); + }); - if (menu == null) - { - return null; - } - - return ObjectMapper.Map(menu); + return cachedMenu; } } } \ No newline at end of file