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 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<PageCacheItem> PageCache { get; }
public PageAdminAppService(
IPageRepository pageRepository,
PageManager pageManager)
PageManager pageManager,
IDistributedCache<PageCacheItem> pageCache)
{
PageRepository = pageRepository;
PageManager = pageManager;
PageCache = pageCache;
}
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)
{
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);
}
}

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 MaxStyleLength { get; set; } = int.MaxValue;
public static string DefaultHomePageCacheKey { get; set; } = "DefaultHomePage";
private 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 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;
PageManager = pageManager;
@ -30,7 +30,6 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe
public virtual async Task<PageDto> 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<PageDto> 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, 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) });
}
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<Page, PageCacheItem>();
CreateMap<PageCacheItem, PageDto>();
CreateMap<Page, PageDto>();
CreateMap<BlogPost, BlogPostCommonDto>();

Loading…
Cancel
Save