Browse Source

CmsKit - Add caching to MainMenu

pull/9354/head
Enis Necipoğlu 5 years ago
parent
commit
7b68e0189a
  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. 10
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MainMenuCacheKey.cs
  4. 26
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuUpdatedHandler.cs
  5. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  6. 13
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Menus/MenuChangedEto.cs
  7. 12
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuUpdatedEto.cs
  8. 34
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs
  9. 23
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuUpdatedHandler.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; }

10
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";
}
}
}

26
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<EntityUpdatedEventData<Menu>>, ITransientDependency
{
public IDistributedEventBus EventBus { get; }
public MenuUpdatedHandler(IDistributedEventBus eventBus)
{
EventBus = eventBus;
}
public async Task HandleEventAsync(EntityUpdatedEventData<Menu> eventData)
{
await EventBus.PublishAsync(new MenuUpdatedEto
{
MenuId = eventData.Entity.Id
});
}
}
}

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.",

13
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; }
}
}

12
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; }
}
}

34
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<MenuWithDetailsDto, MainMenuCacheKey> DistributedCache { get; }
public MenuPublicAppService(
IMenuRepository menuRepository,
IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> distributedCache)
{
MenuRepository = menuRepository;
DistributedCache = distributedCache;
}
public async Task<MenuWithDetailsDto> 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, MenuWithDetailsDto>(menu);
});
if (cachedMenu == null)
{
return null;
}
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
return cachedMenu;
}
}
}

23
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<MenuUpdatedEto>, ITransientDependency
{
protected IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> DistributedCache { get; }
public MenuUpdatedHandler(IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> distributedCache)
{
DistributedCache = distributedCache;
}
public async Task HandleEventAsync(MenuUpdatedEto eventData)
{
await DistributedCache.RemoveAsync(new MainMenuCacheKey());
}
}
}
Loading…
Cancel
Save