From c8c8ce45aa4b9959d4458ccb01d145716d90ee2d Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 25 Sep 2023 13:45:55 +0300 Subject: [PATCH] Allow saving multiple level routes with `/` --- .../CmsKit/Admin/Pages/PageAdminAppService.cs | 4 ++ .../Volo/CmsKit/Pages/PageChangedHandler.cs | 37 ------------------- .../Volo/CmsKit/SlugNormalizer.cs | 2 +- .../Blogs/SlugExtensions_Tests.cs | 14 +++++++ 4 files changed, 19 insertions(+), 38 deletions(-) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageChangedHandler.cs 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 729ff5f6d0..1109bd10a4 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 @@ -66,6 +66,8 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi input.MapExtraPropertiesTo(page); await PageRepository.InsertAsync(page); + await PageCache.RemoveAsync(new PageCacheKey(page.Slug)); + return ObjectMapper.Map(page); } @@ -77,6 +79,8 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi { await InvalidateDefaultHomePageCacheAsync(considerUow: true); } + + await PageCache.RemoveAsync(new PageCacheKey(page.Slug)); await PageManager.SetSlugAsync(page, input.Slug); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageChangedHandler.cs deleted file mode 100644 index 70016a5451..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageChangedHandler.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.Caching; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Domain.Entities.Events; -using Volo.Abp.EventBus; - -namespace Volo.CmsKit.Pages; - -public class PageChangedHandler : - ILocalEventHandler>, - ILocalEventHandler>, - ITransientDependency - -{ - protected IDistributedCache Cache { get; } - - public PageChangedHandler(IDistributedCache cache) - { - Cache = cache; - } - - public Task RemoveFromCacheAsync(string slug) - { - return Cache.RemoveAsync(new PageCacheKey(slug)); - } - - public Task HandleEventAsync(EntityCreatedEventData eventData) - { - return RemoveFromCacheAsync(eventData.Entity.Slug); - } - - public Task HandleEventAsync(EntityUpdatedEventData eventData) - { - return RemoveFromCacheAsync(eventData.Entity.Slug); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/SlugNormalizer.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/SlugNormalizer.cs index 82b954685a..0e3b229620 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/SlugNormalizer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/SlugNormalizer.cs @@ -15,6 +15,6 @@ public static class SlugNormalizer public static string Normalize(string value) { - return SlugHelper.GenerateSlug(value?.Unidecode()); + return SlugHelper.GenerateSlug(value?.Unidecode()).Trim('/'); } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/SlugExtensions_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/SlugExtensions_Tests.cs index 64535f80be..ea07fb335c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/SlugExtensions_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/SlugExtensions_Tests.cs @@ -143,4 +143,18 @@ public class SlugExtensions_Tests // Assert actual.ShouldBe(expected); } + + [Fact] + public void NormalizeSlug_ShouldWorkProperly_WithMultipleLevelStartingSlash() + { + // Arrange + var name = "/path/to/my/page"; + var expected = "path/to/my/page"; + + // Act + var actual = SlugNormalizer.Normalize(name); + + // Assert + actual.ShouldBe(expected); + } }