Browse Source

cms-kit: Invalidate default home page cache when it's changed

pull/15488/head
Engincan VESKE 3 years ago
parent
commit
ea53529eaa
  1. 25
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs
  2. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs
  3. 18
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageCacheItem.cs
  4. 15
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs
  5. 4
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs

25
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 System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Features; using Volo.Abp.Features;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
@ -21,13 +22,17 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi
protected IPageRepository PageRepository { get; } protected IPageRepository PageRepository { get; }
protected PageManager PageManager { get; } protected PageManager PageManager { get; }
protected IDistributedCache<PageCacheItem> PageCache { get; }
public PageAdminAppService( public PageAdminAppService(
IPageRepository pageRepository, IPageRepository pageRepository,
PageManager pageManager) PageManager pageManager,
IDistributedCache<PageCacheItem> pageCache)
{ {
PageRepository = pageRepository; PageRepository = pageRepository;
PageManager = pageManager; PageManager = pageManager;
PageCache = pageCache;
} }
public virtual async Task<PageDto> GetAsync(Guid id) public virtual async Task<PageDto> GetAsync(Guid id)
@ -67,6 +72,10 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi
public virtual async Task<PageDto> UpdateAsync(Guid id, UpdatePageInputDto input) public virtual async Task<PageDto> UpdateAsync(Guid id, UpdatePageInputDto input)
{ {
var page = await PageRepository.GetAsync(id); var page = await PageRepository.GetAsync(id);
if (page.IsHomePage)
{
await InvalidateDefaultHomePageCacheAsync(considerUow: true);
}
await PageManager.SetSlugAsync(page, input.Slug); await PageManager.SetSlugAsync(page, input.Slug);
@ -84,7 +93,13 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi
[Authorize(CmsKitAdminPermissions.Pages.Delete)] [Authorize(CmsKitAdminPermissions.Pages.Delete)]
public virtual async Task DeleteAsync(Guid id) 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)] [Authorize(CmsKitAdminPermissions.Pages.SetAsHomePage)]
@ -93,5 +108,11 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi
var page = await PageRepository.GetAsync(id); var page = await PageRepository.GetAsync(id);
await PageManager.SetHomePageAsync(page); await PageManager.SetHomePageAsync(page);
await InvalidateDefaultHomePageCacheAsync();
}
protected virtual async Task InvalidateDefaultHomePageCacheAsync(bool considerUow = false)
{
await PageCache.RemoveAsync(PageConsts.DefaultHomePageCacheKey, considerUow: considerUow);
} }
} }

2
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 MaxScriptLength { get; set; } = int.MaxValue;
public static int MaxStyleLength { get; set; } = int.MaxValue; public static int MaxStyleLength { get; set; } = int.MaxValue;
public static string DefaultHomePageCacheKey { get; set; } = "DefaultHomePage";
private static string _urlPrefix = "/"; private static string _urlPrefix = "/";
public static string UrlPrefix { public static string UrlPrefix {

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

15
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 IPageRepository PageRepository { get; }
protected PageManager PageManager { get; } protected PageManager PageManager { get; }
protected IDistributedCache<PageDto> PageCache { get; } protected IDistributedCache<PageCacheItem> PageCache { get; }
public PagePublicAppService(IPageRepository pageRepository, PageManager pageManager, IDistributedCache<PageDto> pageCache) public PagePublicAppService(IPageRepository pageRepository, PageManager pageManager, IDistributedCache<PageCacheItem> pageCache)
{ {
PageRepository = pageRepository; PageRepository = pageRepository;
PageManager = pageManager; PageManager = pageManager;
@ -30,7 +30,6 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe
public virtual async Task<PageDto> FindBySlugAsync(string slug) public virtual async Task<PageDto> FindBySlugAsync(string slug)
{ {
var page = await PageRepository.FindBySlugAsync(slug); var page = await PageRepository.FindBySlugAsync(slug);
if (page == null) if (page == null)
{ {
return null; return null;
@ -41,8 +40,8 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe
public virtual async Task<PageDto> FindDefaultHomePageAsync() public virtual async Task<PageDto> FindDefaultHomePageAsync()
{ {
var pageDto = await PageCache.GetAsync("DefaultHomePage"); var pageCacheItem = await PageCache.GetAsync(PageConsts.DefaultHomePageCacheKey);
if (pageDto is null) if (pageCacheItem is null)
{ {
var page = await PageManager.GetHomePageAsync(); var page = await PageManager.GetHomePageAsync();
if (page is null) if (page is null)
@ -50,12 +49,12 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe
return null; return null;
} }
pageDto = ObjectMapper.Map<Page, PageDto>(page); pageCacheItem = ObjectMapper.Map<Page, PageCacheItem>(page);
await PageCache.SetAsync("DefaultHomePage", pageDto, await PageCache.SetAsync(PageConsts.DefaultHomePageCacheKey, pageCacheItem,
new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) }); new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) });
} }
return pageDto; return ObjectMapper.Map<PageCacheItem, PageDto>(pageCacheItem);
} }
} }

4
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs

@ -30,6 +30,10 @@ public class PublicApplicationAutoMapperProfile : Profile
CreateMap<Rating, RatingDto>(); CreateMap<Rating, RatingDto>();
CreateMap<Page, PageCacheItem>();
CreateMap<PageCacheItem, PageDto>();
CreateMap<Page, PageDto>(); CreateMap<Page, PageDto>();
CreateMap<BlogPost, BlogPostCommonDto>(); CreateMap<BlogPost, BlogPostCommonDto>();

Loading…
Cancel
Save