From 7b68e0189ad3e915a9fdec066e1982056d9fc0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enis=20Necipo=C4=9Flu?= Date: Thu, 17 Jun 2021 10:52:57 +0300 Subject: [PATCH] CmsKit - Add caching to MainMenu --- .../Volo/CmsKit/Menus/MenuItemDto.cs | 1 + .../Volo/CmsKit/Menus/MenuWithDetailsDto.cs | 2 ++ .../Volo/CmsKit/Menus/MainMenuCacheKey.cs | 10 ++++++ .../Volo/CmsKit/Menus/MenuUpdatedHandler.cs | 26 ++++++++++++++ .../CmsKit/Localization/Resources/en.json | 2 +- .../Volo/CmsKit/Menus/MenuChangedEto.cs | 13 +++++++ .../Volo/CmsKit/Menus/MenuUpdatedEto.cs | 12 +++++++ .../Public/Menus/MenuPublicAppService.cs | 34 +++++++++++++++---- .../CmsKit/Public/Menus/MenuUpdatedHandler.cs | 23 +++++++++++++ 9 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MainMenuCacheKey.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuUpdatedHandler.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuChangedEto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuUpdatedEto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuUpdatedHandler.cs 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/MainMenuCacheKey.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MainMenuCacheKey.cs new file mode 100644 index 0000000000..e7d79a4c7c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MainMenuCacheKey.cs @@ -0,0 +1,10 @@ +namespace Volo.CmsKit.Public.Menus +{ + public class MainMenuCacheKey + { + public override string ToString() + { + return "MainMenu"; + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuUpdatedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuUpdatedHandler.cs new file mode 100644 index 0000000000..b9d4cfabc4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuUpdatedHandler.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.CmsKit.Menus +{ + public class MenuUpdatedHandler : ILocalEventHandler>, ITransientDependency + { + public IDistributedEventBus EventBus { get; } + + public MenuUpdatedHandler(IDistributedEventBus eventBus) + { + EventBus = eventBus; + } + + public async Task HandleEventAsync(EntityUpdatedEventData eventData) + { + await EventBus.PublishAsync(new MenuUpdatedEto + { + MenuId = eventData.Entity.Id + }); + } + } +} \ 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.Domain.Shared/Volo/CmsKit/Menus/MenuChangedEto.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuChangedEto.cs new file mode 100644 index 0000000000..f4e492e0d0 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuChangedEto.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus; + +namespace Volo.CmsKit.Menus +{ + [Serializable] + [EventName("Volo.CmsKit.Menus.Changed")] + public class MenuChangedEto : EtoBase + { + public Guid MenuId { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuUpdatedEto.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuUpdatedEto.cs new file mode 100644 index 0000000000..75c6474d9b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuUpdatedEto.cs @@ -0,0 +1,12 @@ +using System; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus; + +namespace Volo.CmsKit.Menus +{ + [EventName("Volo.CmsKit.Menus.Updated")] + public class MenuUpdatedEto : EtoBase + { + public Guid MenuId { get; set; } + } +} \ No newline at end of file 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..76c648238a 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,50 @@ +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( + new MainMenuCacheKey(), + async () => + { + var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true); + + if (menu == null) + { + return null; + } - if (menu == null) + return ObjectMapper.Map(menu); + }); + + if (cachedMenu == null) { return null; } - - return ObjectMapper.Map(menu); + + return cachedMenu; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuUpdatedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuUpdatedHandler.cs new file mode 100644 index 0000000000..2c21cd254f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuUpdatedHandler.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.EventBus.Distributed; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Public.Menus +{ + public class MenuUpdatedHandler : IDistributedEventHandler, ITransientDependency + { + protected IDistributedCache DistributedCache { get; } + + public MenuUpdatedHandler(IDistributedCache distributedCache) + { + DistributedCache = distributedCache; + } + + public async Task HandleEventAsync(MenuUpdatedEto eventData) + { + await DistributedCache.RemoveAsync(new MainMenuCacheKey()); + } + } +} \ No newline at end of file