diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs index 7c3f3fd71e..16c39dd859 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; +using Volo.Abp.Caching; using Volo.Abp.Data; using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; @@ -21,13 +22,17 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi protected IPageRepository PageRepository { get; } protected PageManager PageManager { get; } + + protected IDistributedCache PageCache { get; } public PageAdminAppService( IPageRepository pageRepository, - PageManager pageManager) + PageManager pageManager, + IDistributedCache pageCache) { PageRepository = pageRepository; PageManager = pageManager; + PageCache = pageCache; } public virtual async Task GetAsync(Guid id) @@ -67,6 +72,10 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi public virtual async Task UpdateAsync(Guid id, UpdatePageInputDto input) { var page = await PageRepository.GetAsync(id); + if (page.IsHomePage) + { + await InvalidateDefaultHomePageCacheAsync(considerUow: true); + } await PageManager.SetSlugAsync(page, input.Slug); @@ -84,7 +93,13 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi [Authorize(CmsKitAdminPermissions.Pages.Delete)] public virtual async Task DeleteAsync(Guid id) { - await PageRepository.DeleteAsync(id); + var page = await PageRepository.GetAsync(id); + if (page.IsHomePage) + { + await InvalidateDefaultHomePageCacheAsync(considerUow: true); + } + + await PageRepository.DeleteAsync(page); } [Authorize(CmsKitAdminPermissions.Pages.SetAsHomePage)] @@ -93,5 +108,11 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi var page = await PageRepository.GetAsync(id); await PageManager.SetHomePageAsync(page); + await InvalidateDefaultHomePageCacheAsync(); + } + + protected virtual async Task InvalidateDefaultHomePageCacheAsync(bool considerUow = false) + { + await PageCache.RemoveAsync(PageConsts.DefaultHomePageCacheKey, considerUow: considerUow); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs index ff07df87a1..69788463e2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs @@ -15,6 +15,8 @@ public static class PageConsts public static int MaxScriptLength { get; set; } = int.MaxValue; public static int MaxStyleLength { get; set; } = int.MaxValue; + + public static string DefaultHomePageCacheKey { get; set; } = "DefaultHomePage"; private static string _urlPrefix = "/"; public static string UrlPrefix { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs new file mode 100644 index 0000000000..77b98c5b24 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs @@ -0,0 +1,18 @@ +using System; + +namespace Volo.CmsKit.Pages; + +public class PageCacheItem +{ + public Guid Id { get; set; } + + public string Title { get; set; } + + public string Slug { get; set; } + + public string Content { get; set; } + + public string Script { get; set; } + + public string Style { get; set; } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs index b151775d8a..9940dceab1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs @@ -18,9 +18,9 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe protected IPageRepository PageRepository { get; } protected PageManager PageManager { get; } - protected IDistributedCache PageCache { get; } + protected IDistributedCache PageCache { get; } - public PagePublicAppService(IPageRepository pageRepository, PageManager pageManager, IDistributedCache pageCache) + public PagePublicAppService(IPageRepository pageRepository, PageManager pageManager, IDistributedCache pageCache) { PageRepository = pageRepository; PageManager = pageManager; @@ -30,7 +30,6 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe public virtual async Task FindBySlugAsync(string slug) { var page = await PageRepository.FindBySlugAsync(slug); - if (page == null) { return null; @@ -41,8 +40,8 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe public virtual async Task FindDefaultHomePageAsync() { - var pageDto = await PageCache.GetAsync("DefaultHomePage"); - if (pageDto is null) + var pageCacheItem = await PageCache.GetAsync(PageConsts.DefaultHomePageCacheKey); + if (pageCacheItem is null) { var page = await PageManager.GetHomePageAsync(); if (page is null) @@ -50,12 +49,12 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe return null; } - pageDto = ObjectMapper.Map(page); + pageCacheItem = ObjectMapper.Map(page); - await PageCache.SetAsync("DefaultHomePage", pageDto, + await PageCache.SetAsync(PageConsts.DefaultHomePageCacheKey, pageCacheItem, new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) }); } - return pageDto; + return ObjectMapper.Map(pageCacheItem); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 92620743ff..a2ee45266b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -30,6 +30,10 @@ public class PublicApplicationAutoMapperProfile : Profile CreateMap(); + CreateMap(); + + CreateMap(); + CreateMap(); CreateMap();