From 4da3ad0b6fbc7763a9b838081fc3fa0c6f37ffbf Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 8 Aug 2022 14:31:23 +0300 Subject: [PATCH 01/15] Added a new column to Page named `IsHomePage` --- ...ial.Designer.cs => 20220808112328_Initial.Designer.cs} | 7 +++++-- ...0220504032430_Initial.cs => 20220808112328_Initial.cs} | 1 + .../Migrations/UnifiedDbContextModelSnapshot.cs | 5 ++++- .../Volo/CmsKit/Admin/Pages/PageDto.cs | 2 ++ .../src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs | 6 +++--- .../Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs | 8 ++------ 6 files changed, 17 insertions(+), 12 deletions(-) rename modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/{20220504032430_Initial.Designer.cs => 20220808112328_Initial.Designer.cs} (99%) rename modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/{20220504032430_Initial.cs => 20220808112328_Initial.cs} (99%) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220504032430_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220808112328_Initial.Designer.cs similarity index 99% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220504032430_Initial.Designer.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220808112328_Initial.Designer.cs index fc428d9f31..a94401a3a4 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220504032430_Initial.Designer.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220808112328_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20220504032430_Initial")] + [Migration("20220808112328_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -21,7 +21,7 @@ namespace Volo.CmsKit.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("ProductVersion", "6.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); @@ -1662,6 +1662,9 @@ namespace Volo.CmsKit.Migrations .HasDefaultValue(false) .HasColumnName("IsDeleted"); + b.Property("IsHomePage") + .HasColumnType("bit"); + b.Property("LastModificationTime") .HasColumnType("datetime2") .HasColumnName("LastModificationTime"); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220504032430_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220808112328_Initial.cs similarity index 99% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220504032430_Initial.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220808112328_Initial.cs index e48811ee84..5f499c30a9 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220504032430_Initial.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220808112328_Initial.cs @@ -433,6 +433,7 @@ namespace Volo.CmsKit.Migrations Content = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: true), Script = table.Column(type: "nvarchar(max)", nullable: true), Style = table.Column(type: "nvarchar(max)", nullable: true), + IsHomePage = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 2a5d13e732..4205bd31c3 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace Volo.CmsKit.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("ProductVersion", "6.0.5") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); @@ -1660,6 +1660,9 @@ namespace Volo.CmsKit.Migrations .HasDefaultValue(false) .HasColumnName("IsDeleted"); + b.Property("IsHomePage") + .HasColumnType("bit"); + b.Property("LastModificationTime") .HasColumnType("datetime2") .HasColumnName("LastModificationTime"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs index 20a76bf43e..f8348302d2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs @@ -17,5 +17,7 @@ public class PageDto : AuditedEntityDto, IHasConcurrencyStamp public string Style { get; set; } + public bool IsHomePage { get; set; } + public string ConcurrencyStamp { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs index d5cd64fbed..339a034ee6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs @@ -20,6 +20,8 @@ public class Page : FullAuditedAggregateRoot, IMultiTenant public virtual string Style { get; protected set; } + public virtual bool IsHomePage { get; set; } + protected Page() { } @@ -49,9 +51,7 @@ public class Page : FullAuditedAggregateRoot, IMultiTenant internal virtual void SetSlug(string slug) { - Slug = SlugNormalizer.Normalize( - Check.NotNullOrEmpty(slug, nameof(slug), PageConsts.MaxSlugLength) - ); + Slug = SlugNormalizer.Normalize(Check.NotNullOrEmpty(slug, nameof(slug), PageConsts.MaxSlugLength)); } public virtual void SetContent(string content) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs index f0d1bac1e7..4a4d15728b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs @@ -1,9 +1,5 @@ -using JetBrains.Annotations; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp; using Volo.Abp.Domain.Services; From 384fdab06eb7baa641007e73750365314f757c5a Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 8 Aug 2022 16:25:05 +0300 Subject: [PATCH 02/15] Added SetAsHomePage main functionality --- .../Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs | 3 +-- .../Volo/CmsKit/Admin/Pages/PageAdminAppService.cs | 11 +++++++++-- .../Volo/CmsKit/Admin/Pages/PageAdminController.cs | 8 +++++++- .../Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js | 11 +++++++++++ .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 8 ++++++++ .../Volo/CmsKit/Pages/IPageRepository.cs | 2 ++ .../Volo/CmsKit/Pages/PageManager.cs | 10 ++++++++++ .../Volo/CmsKit/Pages/EfCorePageRepository.cs | 5 +++++ .../Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs | 5 +++++ 9 files changed, 58 insertions(+), 5 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs index ec7cb919f9..e0d901bdd5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs @@ -1,11 +1,10 @@ using System; using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; -using Volo.Abp.Content; namespace Volo.CmsKit.Admin.Pages; public interface IPageAdminAppService : ICrudAppService { + Task SetAsHomePageAsync(Guid id); } 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 68f0690555..67c6464e0c 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 @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using AutoMapper; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Menus; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Pages; using Volo.CmsKit.Permissions; @@ -85,4 +83,13 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi { await PageRepository.DeleteAsync(id); } + + public virtual async Task SetAsHomePageAsync(Guid id) + { + await PageManager.SetHomePageAsFalseAsync(true); + + var page = await PageRepository.GetAsync(id); + page.IsHomePage = true; + await PageRepository.UpdateAsync(page); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs index 7936b206e6..8311c8ff58 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs @@ -5,7 +5,6 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Menus; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; @@ -60,4 +59,11 @@ public class PageAdminController : CmsKitAdminController, IPageAdminAppService { return PageAdminAppService.DeleteAsync(id); } + + [HttpGet] + [Route("setashomepage/{id}")] + public virtual Task SetAsHomePageAsync(Guid id) + { + return PageAdminAppService.SetAsHomePageAsync(id); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index 3a8612072c..f51532c63c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -46,6 +46,17 @@ $(function (){ abp.notify.success(l('SuccessfullyDeleted')); }); } + }, + { + text: l('SetAsHomePage'), + visible: abp.auth.isGranted('CmsKit.Pages.Delete'), + action: function (data) { + pagesService + .setAsHomePage(data.record.id) + .then(function () { + abp.notify.success(l('SetAsHomePage')); + }); + } } ] } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 94017ec7e2..320aa73b12 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -136,6 +136,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.pages.pageAdmin.setAsHomePage = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/pages/setashomepage/' + id + '', + type: 'GET', + dataType: null + }, ajaxParams)); + }; + })(); // controller volo.cmsKit.admin.menus.menuItemAdmin diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs index 020622f080..20aab4ff8f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs @@ -22,4 +22,6 @@ public interface IPageRepository : IBasicRepository Task FindBySlugAsync(string slug, CancellationToken cancellationToken = default); Task ExistsAsync(string slug, CancellationToken cancellationToken = default); + + Task FindByIsHomePageAsync(bool isHomePage, CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs index 4a4d15728b..8a85edfb25 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs @@ -45,6 +45,16 @@ public class PageManager : DomainService } } + public virtual async Task SetHomePageAsFalseAsync(bool isHomePage) + { + var page = await PageRepository.FindByIsHomePageAsync(isHomePage); + if (page is not null) + { + page.IsHomePage = false; + await PageRepository.UpdateAsync(page); + } + } + protected virtual async Task CheckPageSlugAsync(string slug) { if (await PageRepository.ExistsAsync(slug)) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs index 125c1a97ff..e15689ace9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs @@ -63,4 +63,9 @@ public class EfCorePageRepository : EfCoreRepository x.Slug == slug, GetCancellationToken(cancellationToken)); } + + public virtual Task FindByIsHomePageAsync(bool isHomePage, CancellationToken cancellationToken = default) + { + return FindAsync(x => x.IsHomePage == isHomePage, cancellationToken: GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs index 74c5d8cc3c..e5073fc374 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -71,4 +71,9 @@ public class MongoPageRepository : MongoDbRepository x.Slug == slug, GetCancellationToken(cancellationToken)); } + + public virtual Task FindByIsHomePageAsync(bool isHomePage, CancellationToken cancellationToken = default) + { + return FindAsync(x => x.IsHomePage == isHomePage, cancellationToken: GetCancellationToken(cancellationToken)); + } } From 946b9904857e89bc4faba91c1ced7f11cd0328d3 Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 8 Aug 2022 17:16:02 +0300 Subject: [PATCH 03/15] Added permission for `SetAsHomePage` --- ...CmsKitAdminPermissionDefinitionProvider.cs | 2 ++ .../Permissions/CmsKitAdminPermissions.cs | 7 +++--- .../CmsKit/Admin/Pages/PageAdminAppService.cs | 1 + .../CmsKit/Admin/Pages/PageAdminController.cs | 1 + .../CmsKitAdminWebModule.cs | 25 ++++++++++--------- .../Pages/CmsKit/Pages/index.js | 2 +- 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs index b89b38d43a..7ba4cc2d84 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs @@ -35,6 +35,8 @@ public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvi .RequireGlobalFeatures(typeof(PagesFeature)); pageManagement.AddChild(CmsKitAdminPermissions.Pages.Delete, L("Permission:PageManagement:Delete")) .RequireGlobalFeatures(typeof(PagesFeature)); + pageManagement.AddChild(CmsKitAdminPermissions.Pages.SetAsHomePage, L("Permission:PageManagement:SetAsHomePage")) + .RequireGlobalFeatures(typeof(PagesFeature)); var blogManagement = cmsGroup.AddPermission(CmsKitAdminPermissions.Blogs.Default, L("Permission:BlogManagement")) .RequireGlobalFeatures(typeof(BlogsFeature)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs index b5d2a8eaa6..2852a0b4ee 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -1,8 +1,6 @@ -using Volo.Abp.Reflection; +namespace Volo.CmsKit.Permissions; -namespace Volo.CmsKit.Permissions; - -public class CmsKitAdminPermissions +public static class CmsKitAdminPermissions { public const string GroupName = "CmsKit"; @@ -34,6 +32,7 @@ public class CmsKitAdminPermissions public const string Create = Default + ".Create"; public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; + public const string SetAsHomePage = Default + ".SetAsHomePage"; } public static class Blogs 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 67c6464e0c..c6c7b614b3 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 @@ -84,6 +84,7 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi await PageRepository.DeleteAsync(id); } + [Authorize(CmsKitAdminPermissions.Pages.SetAsHomePage)] public virtual async Task SetAsHomePageAsync(Guid id) { await PageManager.SetHomePageAsFalseAsync(true); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs index 8311c8ff58..637c4e11a0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs @@ -61,6 +61,7 @@ public class PageAdminController : CmsKitAdminController, IPageAdminAppService } [HttpGet] + [Authorize(CmsKitAdminPermissions.Pages.SetAsHomePage)] [Route("setashomepage/{id}")] public virtual Task SetAsHomePageAsync(Guid id) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs index be4d85ddcc..4c886b9185 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs @@ -1,19 +1,19 @@ using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc; -using Volo.CmsKit.Admin.Web.Menus; using Volo.Abp.AspNetCore.Mvc.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars; +using Volo.Abp.AutoMapper; +using Volo.Abp.Http.ProxyScripting.Generators.JQuery; +using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; using Volo.Abp.VirtualFileSystem; +using Volo.CmsKit.Admin.MediaDescriptors; +using Volo.CmsKit.Admin.Web.Menus; using Volo.CmsKit.Localization; -using Volo.CmsKit.Web; using Volo.CmsKit.Permissions; -using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars; -using Volo.Abp.Localization; -using Volo.Abp.AutoMapper; -using Volo.Abp.Http.ProxyScripting.Generators.JQuery; -using Volo.CmsKit.Admin.MediaDescriptors; +using Volo.CmsKit.Web; namespace Volo.CmsKit.Admin.Web; @@ -64,6 +64,7 @@ public class CmsKitAdminWebModule : AbpModule options.Conventions.AuthorizeFolder("/CmsKit/Pages", CmsKitAdminPermissions.Pages.Default); options.Conventions.AuthorizeFolder("/CmsKit/Pages/Create", CmsKitAdminPermissions.Pages.Create); options.Conventions.AuthorizeFolder("/CmsKit/Pages/Update", CmsKitAdminPermissions.Pages.Update); + options.Conventions.AuthorizeFolder("/CmsKit/Pages/SetAsHomePage", CmsKitAdminPermissions.Pages.SetAsHomePage); options.Conventions.AuthorizeFolder("/CmsKit/Blogs", CmsKitAdminPermissions.Blogs.Default); options.Conventions.AuthorizeFolder("/CmsKit/Blogs/Create", CmsKitAdminPermissions.Blogs.Create); options.Conventions.AuthorizeFolder("/CmsKit/Blogs/Update", CmsKitAdminPermissions.Blogs.Update); @@ -98,7 +99,7 @@ public class CmsKitAdminWebModule : AbpModule Configure(options => { - options.Configure( + options.Configure( toolbar => { toolbar.AddButton( @@ -110,7 +111,7 @@ public class CmsKitAdminWebModule : AbpModule } ); - options.Configure( + options.Configure( toolbar => { toolbar.AddButton( @@ -121,7 +122,7 @@ public class CmsKitAdminWebModule : AbpModule ); }); - options.Configure( + options.Configure( toolbar => { toolbar.AddButton( @@ -133,7 +134,7 @@ public class CmsKitAdminWebModule : AbpModule ); }); - options.Configure( + options.Configure( toolbar => { toolbar.AddButton( @@ -145,7 +146,7 @@ public class CmsKitAdminWebModule : AbpModule ); }); - options.Configure( + options.Configure( toolbar => { toolbar.AddButton( diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index f51532c63c..de09ac2077 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -49,7 +49,7 @@ $(function (){ }, { text: l('SetAsHomePage'), - visible: abp.auth.isGranted('CmsKit.Pages.Delete'), + visible: abp.auth.isGranted('CmsKit.Pages.SetAsHomePage'), action: function (data) { pagesService .setAsHomePage(data.record.id) From b059057eb290ea8f6194c84474813bf15dce8043 Mon Sep 17 00:00:00 2001 From: malik masis Date: Mon, 8 Aug 2022 17:32:49 +0300 Subject: [PATCH 04/15] Added words for languages --- .../Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js | 2 +- .../Volo/CmsKit/Localization/Resources/en.json | 9 ++++++--- .../Volo/CmsKit/Localization/Resources/tr.json | 7 ++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index de09ac2077..553d0ea1e3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -54,7 +54,7 @@ $(function (){ pagesService .setAsHomePage(data.record.id) .then(function () { - abp.notify.success(l('SetAsHomePage')); + abp.notify.success(l('CompletedSettingAsHomePage')); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 8da6be8bd5..9de5039719 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -112,6 +112,7 @@ "Permission:PageManagement:Create": "Create", "Permission:PageManagement:Delete": "Delete", "Permission:PageManagement:Update": "Update", + "Permission:PageManagement:SetAsHomePage": "Set As Home Page", "Permission:TagManagement": "Tag Management", "Permission:TagManagement.Create": "Create", "Permission:TagManagement.Delete": "Delete", @@ -185,8 +186,10 @@ "Add": "Add", "AddWidget": "Add Widget", "PleaseConfigureWidgets": "Please configure widgets", - "SelectAnAuthor":"Select an Author", - "InThisDocument":"In This Document", - "GoToTop":"Go To Top" + "SelectAnAuthor": "Select an Author", + "InThisDocument": "In This Document", + "GoToTop": "Go To Top", + "SetAsHomePage": "Set As Home Page", + "CompletedSettingAsHomePage": "Set as home page" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 431c50596c..b7bde02a87 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -112,6 +112,7 @@ "Permission:PageManagement:Create": "Oluşturmak", "Permission:PageManagement:Delete": "Silmek", "Permission:PageManagement:Update": "Güncelleme", + "Permission:PageManagement:SetAsHomePage": "Anasayfa Olarak Ayarla", "Permission:TagManagement": "Etiket Yönetimi", "Permission:TagManagement.Create": "Etiket Oluşturma", "Permission:TagManagement.Delete": "Etiket Silme", @@ -163,8 +164,6 @@ "YourReply": "Cevabınız", "MarkdownSupported": "Markdown destekler.", "GlobalResources": "Global Kaynaklar", - "Script": "Script", - "Style": "Style", "SavedSuccessfully": "Başarıyla kaydedildi", "CmsKit.BlogPost.Status.0": "Taslak", "CmsKit.BlogPost.Status.1": "Yayınlandı", @@ -190,6 +189,8 @@ "CmsKit.BlogPost.ScrollIndex": "Blog yazılarında hızlı gezinme çubuğu", "Add": "Ekle", "AddWidget": "Widget Ekle", - "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın" + "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın", + "SetAsHomePage": "Anasayfa Olarak Ayarla", + "CompletedSettingAsHomePage": "Anasayfa olarak ayarlandı" } } From 66aeb5a61cb9c222d143f225c735677270361471 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 9 Aug 2022 10:47:05 +0300 Subject: [PATCH 05/15] Updated http client proxy --- .../PageAdminClientProxy.Generated.cs | 8 ++++ .../cms-kit-admin-generate-proxy.json | 37 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/PageAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/PageAdminClientProxy.Generated.cs index 5d404b2751..efa0315690 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/PageAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/PageAdminClientProxy.Generated.cs @@ -55,4 +55,12 @@ public partial class PageAdminClientProxy : ClientProxyBase" + }, + "SetAsHomePageAsyncById": { + "uniqueName": "SetAsHomePageAsyncById", + "name": "SetAsHomePageAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/pages/setashomepage/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Pages.IPageAdminAppService" } } }, From 64affb09b86e0e084cf96f87d8b0b5211dd60ae1 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 9 Aug 2022 11:38:57 +0300 Subject: [PATCH 06/15] Added `IsHomePage` to Page list --- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js | 8 +++++++- .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index 553d0ea1e3..8a49f94073 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -17,7 +17,7 @@ $(function (){ scrollCollapse: true, scrollX: true, ordering: true, - order: [[3, "desc"]], + order: [[4, "desc"]], ajax: abp.libs.datatables.createAjax(pagesService.getList, getFilter), columnDefs: [ { @@ -55,6 +55,7 @@ $(function (){ .setAsHomePage(data.record.id) .then(function () { abp.notify.success(l('CompletedSettingAsHomePage')); + _dataTable.ajax.reload(); }); } } @@ -71,6 +72,11 @@ $(function (){ orderable: true, data: "slug" }, + { + title: l("IsHomePage"), + orderable: true, + data: "isHomePage" + }, { title: l("CreationTime"), orderable: true, diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 9de5039719..79618107d5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -190,6 +190,7 @@ "InThisDocument": "In This Document", "GoToTop": "Go To Top", "SetAsHomePage": "Set As Home Page", - "CompletedSettingAsHomePage": "Set as home page" + "CompletedSettingAsHomePage": "Set as home page", + "IsHomePage": "Is Home Page" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index b7bde02a87..6223b3a2de 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -190,7 +190,8 @@ "Add": "Ekle", "AddWidget": "Widget Ekle", "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın", - "SetAsHomePage": "Anasayfa Olarak Ayarla", - "CompletedSettingAsHomePage": "Anasayfa olarak ayarlandı" + "SetAsHomePage": "Ana sayfa Olarak Ayarla", + "CompletedSettingAsHomePage": "Ana sayfa olarak ayarlandı", + "IsHomePage": "Ana Sayfa Mı" } } From 3e923ca7ca43a612d90f8e1a728892b339a373c5 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 9 Aug 2022 11:39:14 +0300 Subject: [PATCH 07/15] Added unit tests --- .../Pages/PageAdminAppService_Tests.cs | 13 +++++++++ .../Pages/PageManager_Test.cs | 27 +++++++++++++++++++ .../Pages/PageRepository_Test.cs | 8 ++++++ 3 files changed, 48 insertions(+) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs index 97a931fb70..86346da843 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs @@ -130,4 +130,17 @@ public class PageAdminAppService_Tests : CmsKitApplicationTestBase await Should.ThrowAsync(async () => await _pageRepository.GetAsync(_data.Page_1_Id)); } + + [Fact] + public async Task ShouldSetAsHomePageAsync() + { + await _pageAdminAppService.SetAsHomePageAsync(_data.Page_1_Id); + + var setAsHomePage = await _pageAdminAppService.GetAsync(_data.Page_1_Id); + var setAsHomePageAsFalse = await _pageAdminAppService.GetAsync(_data.Page_2_Id); + + setAsHomePage.IsHomePage.ShouldBeTrue(); + setAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); + + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs index 208de3817f..c674df49eb 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs @@ -67,4 +67,31 @@ public class PageManager_Test : CmsKitDomainTestBase exception.ShouldNotBeNull(); } + + [Fact] + public async Task SetHomePageAsFalseAsync_ShouldWorkProperly_IfExistHomePage() + { + var page = await pageRepository.GetAsync(testData.Page_1_Id); + page.IsHomePage = true; + await pageRepository.UpdateAsync(page); + + await pageManager.SetHomePageAsFalseAsync(true); + + page.IsHomePage.ShouldBeTrue(); + + var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); + pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); + } + + [Fact] + public async Task SetHomePageAsFalseAsync_ShouldWorkProperly_IfNotExistHomePage() + { + var page = await pageRepository.GetAsync(testData.Page_1_Id); + page.IsHomePage = true; + await pageManager.SetHomePageAsFalseAsync(true); + page.IsHomePage.ShouldBeTrue(); + + var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); + pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs index 4b56f77f43..09be4fff6e 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs @@ -91,4 +91,12 @@ public abstract class PageRepository_Test : CmsKitTestBase Date: Tue, 9 Aug 2022 15:02:45 +0300 Subject: [PATCH 08/15] Made the action PUT instead of GET --- .../ClientProxies/cms-kit-admin-generate-proxy.json | 2 +- .../Volo/CmsKit/Admin/Pages/PageAdminController.cs | 4 ++-- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json index 69ff3c2450..4a8bb096dc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json @@ -679,7 +679,7 @@ "SetAsHomePageAsyncById": { "uniqueName": "SetAsHomePageAsyncById", "name": "SetAsHomePageAsync", - "httpMethod": "GET", + "httpMethod": "PUT", "url": "api/cms-kit-admin/pages/setashomepage/{id}", "supportedVersions": [], "parametersOnMethod": [ diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs index 637c4e11a0..51e8c1a3e0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs @@ -60,10 +60,10 @@ public class PageAdminController : CmsKitAdminController, IPageAdminAppService return PageAdminAppService.DeleteAsync(id); } - [HttpGet] + [HttpPut] [Authorize(CmsKitAdminPermissions.Pages.SetAsHomePage)] [Route("setashomepage/{id}")] - public virtual Task SetAsHomePageAsync(Guid id) + public virtual Task SetAsHomePageAsync([FromRoute] Guid id) { return PageAdminAppService.SetAsHomePageAsync(id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 320aa73b12..ff5e16c2d0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -139,7 +139,7 @@ volo.cmsKit.admin.pages.pageAdmin.setAsHomePage = function(id, ajaxParams) { return abp.ajax($.extend(true, { url: abp.appPath + 'api/cms-kit-admin/pages/setashomepage/' + id + '', - type: 'GET', + type: 'PUT', dataType: null }, ajaxParams)); }; From 3b033c395dd401dd0871dd564c4d0eb99b0ddaac Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 9 Aug 2022 15:03:32 +0300 Subject: [PATCH 09/15] Added warning for `AlreadyHomePage` --- .../Pages/CmsKit/Pages/index.js | 20 ++++++++++++------- .../CmsKit/Localization/Resources/en.json | 3 ++- .../CmsKit/Localization/Resources/tr.json | 3 ++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index 8a49f94073..4d3d5ba765 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -1,4 +1,4 @@ -$(function (){ +$(function () { var l = abp.localization.getResource("CmsKit"); var pagesService = volo.cmsKit.admin.pages.pageAdmin; @@ -51,12 +51,18 @@ $(function (){ text: l('SetAsHomePage'), visible: abp.auth.isGranted('CmsKit.Pages.SetAsHomePage'), action: function (data) { - pagesService - .setAsHomePage(data.record.id) - .then(function () { - abp.notify.success(l('CompletedSettingAsHomePage')); - _dataTable.ajax.reload(); - }); + if (data.record.isHomePage === false) { + pagesService + .setAsHomePage(data.record.id) + .then(function () { + + _dataTable.ajax.reload(); + abp.notify.success(l('CompletedSettingAsHomePage')); + }); + } + else { + abp.notify.warn(l('AlreadyHomePage')); + } } } ] diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 79618107d5..983023321a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -191,6 +191,7 @@ "GoToTop": "Go To Top", "SetAsHomePage": "Set As Home Page", "CompletedSettingAsHomePage": "Set as home page", - "IsHomePage": "Is Home Page" + "IsHomePage": "Is Home Page", + "AlreadyHomePage": "Already set as home page" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 6223b3a2de..bf02b689ce 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -192,6 +192,7 @@ "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın", "SetAsHomePage": "Ana sayfa Olarak Ayarla", "CompletedSettingAsHomePage": "Ana sayfa olarak ayarlandı", - "IsHomePage": "Ana Sayfa Mı" + "IsHomePage": "Ana Sayfa Mı", + "AlreadyHomePage": "Önceden ana sayfa olarak ayarlı" } } From 04a57e6c270cebdccbaed967b82d187919df1fa0 Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 10 Aug 2022 16:57:01 +0300 Subject: [PATCH 10/15] Added a new action to find default page --- .../CmsKit/Public/Pages/IPagePublicAppService.cs | 1 + .../CmsKit/Public/Pages/PagePublicAppService.cs | 13 +++++++++++++ .../CmsKit/Public/Pages/PagesPublicController.cs | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs index 230b8ded97..bec4261f19 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs @@ -8,4 +8,5 @@ namespace Volo.CmsKit.Public.Pages; public interface IPagePublicAppService : IApplicationService { Task FindBySlugAsync([NotNull] string slug); + Task FindDefaultHomePageAsync(); } 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 2bae7c350f..b4b20460f6 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 @@ -31,4 +31,17 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe pageDto.ContentFragments = await ContentParser.ParseAsync(page.Content); return pageDto; } + + public virtual async Task FindDefaultHomePageAsync() + { + var page = await PageRepository.FindByIsHomePageAsync(true); + + if (page == null) + { + return null; + } + + var pageDto = ObjectMapper.Map(page); + return pageDto; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs index cd65f84c26..b18167ad67 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs @@ -26,4 +26,10 @@ public class PagesPublicController : CmsKitPublicControllerBase, IPagePublicAppS { return PageAppService.FindBySlugAsync(slug); } + + [HttpGet] + public Task FindDefaultHomePageAsync() + { + return PageAppService.FindDefaultHomePageAsync(); + } } From 95115cef4d501700660f1f9e5035cb55929506c4 Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 10 Aug 2022 16:58:52 +0300 Subject: [PATCH 11/15] Added a new middleware to set the default homepage --- .../CmsKitPublicWebModule.cs | 17 +++++++---- .../DefaultHomePageMiddleware.cs | 28 +++++++++++++++++++ .../HomePageDefaultMiddlewareExtensions.cs | 11 ++++++++ 3 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index 88b01c8ae9..6e30c49a9c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -1,6 +1,7 @@ using Markdig; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; using Volo.Abp.AutoMapper; @@ -88,21 +89,27 @@ public class CmsKitPublicWebModule : AbpModule options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/BlogPost", @"/blogs/{blogSlug}/{blogPostSlug:minlength(1)}"); }); } - + if (GlobalFeatureManager.Instance.IsEnabled()) { Configure(options => { options.Add( - LayoutHooks.Head.Last, - typeof(GlobalStyleViewComponent) + LayoutHooks.Head.Last, + typeof(GlobalStyleViewComponent) ); options.Add( - LayoutHooks.Body.Last, - typeof(GlobalScriptViewComponent) + LayoutHooks.Body.Last, + typeof(GlobalScriptViewComponent) ); }); } } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + app.UseHomePageDefaultMiddleware(); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs new file mode 100644 index 0000000000..bb30a5276c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/DefaultHomePageMiddleware.cs @@ -0,0 +1,28 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Volo.CmsKit.Pages; +using Volo.CmsKit.Public.Pages; + +namespace Volo.CmsKit.Public.Web; + +public class DefaultHomePageMiddleware +{ + private readonly RequestDelegate _next; + private readonly IPagePublicAppService _pagePublicAppService; + + public DefaultHomePageMiddleware(RequestDelegate next, IPagePublicAppService pagePublicAppService) + { + _next = next; + _pagePublicAppService = pagePublicAppService; + } + public async Task InvokeAsync(HttpContext httpContext) + { + var page = await _pagePublicAppService.FindDefaultHomePageAsync(); + if (page is not null && httpContext.Request.Path.Value == "/") + { + httpContext.Request.Path = $"{PageConsts.UrlPrefix}{page.Slug}"; + } + + await _next(httpContext); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs new file mode 100644 index 0000000000..c5a2d8516f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/HomePageDefaultMiddlewareExtensions.cs @@ -0,0 +1,11 @@ +using Microsoft.AspNetCore.Builder; + +namespace Volo.CmsKit.Public.Web; + +public static class HomePageDefaultMiddlewareExtensions +{ + public static IApplicationBuilder UseHomePageDefaultMiddleware(this IApplicationBuilder builder) + { + return builder.UseMiddleware(); + } +} From b5ded3aa6912c57d227a68c69ac5409699206697 Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 10 Aug 2022 16:59:07 +0300 Subject: [PATCH 12/15] updated both proxies --- .../BlogPostPublicClientProxy.Generated.cs | 3 +++ .../PagesPublicClientProxy.Generated.cs | 10 ++++++++++ .../ClientProxies/cms-kit-generate-proxy.json | 15 +++++++++++++++ .../wwwroot/client-proxies/cms-kit-proxy.js | 9 ++++++++- 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index f26816e88d..79b883aa49 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -2,8 +2,11 @@ using System; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; +using Volo.CmsKit.Public.Blogs; using Volo.CmsKit.Contents; using Volo.CmsKit.Users; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs index f992bb3dbf..2ae4e790a6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs @@ -1,7 +1,12 @@ // This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using System; using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; +using Volo.CmsKit.Public.Pages; using Volo.CmsKit.Contents; // ReSharper disable once CheckNamespace @@ -18,4 +23,9 @@ public partial class PagesPublicClientProxy : ClientProxyBase FindDefaultHomePageAsync() + { + return await RequestAsync(nameof(FindDefaultHomePageAsync)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index e3b3802ee9..2892c636e3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -553,6 +553,21 @@ }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Pages.IPagePublicAppService" + }, + "FindDefaultHomePageAsync": { + "uniqueName": "FindDefaultHomePageAsync", + "name": "FindDefaultHomePageAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/pages", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Contents.PageDto", + "typeSimple": "Volo.CmsKit.Contents.PageDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.Pages.IPagePublicAppService" } } }, diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js index e1cdae5ec3..ec98417af5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/wwwroot/client-proxies/cms-kit-proxy.js @@ -95,6 +95,13 @@ }, ajaxParams)); }; + volo.cmsKit.public.pages.pagesPublic.findDefaultHomePage = function(ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-public/pages', + type: 'GET' + }, ajaxParams)); + }; + })(); // controller volo.cmsKit.public.menus.menuItemPublic @@ -188,7 +195,7 @@ volo.cmsKit.public.blogs.blogPostPublic.getList = function(blogSlug, input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-public/blog-posts/' + blogSlug + '' + abp.utils.buildQueryString([{ name: 'authorId', value: input.authorId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', + url: abp.appPath + 'api/cms-kit-public/blog-posts/' + blogSlug + '' + abp.utils.buildQueryString([{ name: 'authorId', value: input.authorId }, { name: 'tagId', value: input.tagId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', type: 'GET' }, ajaxParams)); }; From 567936d259dfd1e8695216ddd455f621bb3a8fbf Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 10 Aug 2022 17:47:17 +0300 Subject: [PATCH 13/15] Cached homepage action for better performance --- .../Public/Pages/PagePublicAppService.cs | 26 ++++++++++++++----- .../CmsKitPublicWebModule.cs | 6 +++++ 2 files changed, 25 insertions(+), 7 deletions(-) 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 b4b20460f6..99bf3b4cae 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 @@ -1,4 +1,7 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; @@ -11,11 +14,13 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe { protected IPageRepository PageRepository { get; } protected ContentParser ContentParser { get; } + private readonly IDistributedCache _cache; - public PagePublicAppService(IPageRepository pageRepository, ContentParser contentParser) + public PagePublicAppService(IPageRepository pageRepository, ContentParser contentParser, IDistributedCache cache) { PageRepository = pageRepository; ContentParser = contentParser; + _cache = cache; } public virtual async Task FindBySlugAsync(string slug) @@ -34,14 +39,21 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe public virtual async Task FindDefaultHomePageAsync() { - var page = await PageRepository.FindByIsHomePageAsync(true); - - if (page == null) + var pageDto = await _cache.GetAsync("DefaultHomePage"); + if (pageDto is null) { - return null; + var page = await PageRepository.FindByIsHomePageAsync(true); + if (page is null) + { + return null; + } + + pageDto = ObjectMapper.Map(page); + + await _cache.SetAsync("DefaultHomePage", pageDto, + new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) }); } - var pageDto = ObjectMapper.Map(page); return pageDto; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index 6e30c49a9c..6e679e1c82 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -5,6 +5,7 @@ using Volo.Abp; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook; using Volo.Abp.AutoMapper; +using Volo.Abp.Caching; using Volo.Abp.GlobalFeatures; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; @@ -76,6 +77,11 @@ public class CmsKitPublicWebModule : AbpModule { options.DisableModule(CmsKitPublicRemoteServiceConsts.ModuleName); }); + + Configure(options => + { + options.KeyPrefix = "CmsKit:"; + }); } public override void PostConfigureServices(ServiceConfigurationContext context) From 035c66403c7b08921281b49d01a3d48bc7fd6b60 Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 10 Aug 2022 18:37:58 +0300 Subject: [PATCH 14/15] Added the removing home page feature --- .../CmsKit/Admin/Pages/PageAdminAppService.cs | 11 ++++++++--- .../Pages/CmsKit/Pages/index.js | 19 ++++++++----------- .../CmsKit/Localization/Resources/en.json | 4 ++-- .../CmsKit/Localization/Resources/tr.json | 6 +++--- 4 files changed, 21 insertions(+), 19 deletions(-) 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 c6c7b614b3..ea89ced70d 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 @@ -87,10 +87,15 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi [Authorize(CmsKitAdminPermissions.Pages.SetAsHomePage)] public virtual async Task SetAsHomePageAsync(Guid id) { - await PageManager.SetHomePageAsFalseAsync(true); - var page = await PageRepository.GetAsync(id); - page.IsHomePage = true; + if (!page.IsHomePage) + { + await PageManager.SetHomePageAsFalseAsync(true); + page = await PageRepository.GetAsync(id); + } + + page.IsHomePage = !page.IsHomePage; ; + await PageRepository.UpdateAsync(page); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index 4d3d5ba765..730c9b6b30 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -51,18 +51,15 @@ $(function () { text: l('SetAsHomePage'), visible: abp.auth.isGranted('CmsKit.Pages.SetAsHomePage'), action: function (data) { - if (data.record.isHomePage === false) { - pagesService - .setAsHomePage(data.record.id) - .then(function () { + pagesService + .setAsHomePage(data.record.id) + .then(function () { - _dataTable.ajax.reload(); - abp.notify.success(l('CompletedSettingAsHomePage')); - }); - } - else { - abp.notify.warn(l('AlreadyHomePage')); - } + _dataTable.ajax.reload(); + data.record.isHomePage ? + abp.notify.warn(l('RemovedSettingAsHomePage')) + : abp.notify.success(l('CompletedSettingAsHomePage')); + }); } } ] diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 983023321a..4870abe237 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -189,9 +189,9 @@ "SelectAnAuthor": "Select an Author", "InThisDocument": "In This Document", "GoToTop": "Go To Top", - "SetAsHomePage": "Set As Home Page", + "SetAsHomePage": "Change Home Page Status", "CompletedSettingAsHomePage": "Set as home page", "IsHomePage": "Is Home Page", - "AlreadyHomePage": "Already set as home page" + "RemovedSettingAsHomePage": "Removed setting the home page" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index bf02b689ce..70763aad47 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -190,9 +190,9 @@ "Add": "Ekle", "AddWidget": "Widget Ekle", "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın", - "SetAsHomePage": "Ana sayfa Olarak Ayarla", - "CompletedSettingAsHomePage": "Ana sayfa olarak ayarlandı", + "SetAsHomePage": "Ana sayfa Durumunu Değiştir", + "CompletedSettingAsHomePage": "Ana Sayfa olarak ayarlandı", "IsHomePage": "Ana Sayfa Mı", - "AlreadyHomePage": "Önceden ana sayfa olarak ayarlı" + "RemovedSettingAsHomePage": "Ana sayfa ayarı kaldırıldı" } } From a396c37cc78ade61cd18789eed75781c516ab8d3 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 10 Oct 2022 14:54:41 +0300 Subject: [PATCH 15/15] HomePage enhancements --- .../CmsKit/Admin/Pages/PageAdminAppService.cs | 9 +- .../Volo/CmsKit/CmsKitErrorCodes.cs | 3 +- .../Volo/CmsKit/Pages/IPageRepository.cs | 2 +- .../CmsKit/Pages/MultipleHomePageException.cs | 23 +++ .../Volo/CmsKit/Pages/Page.cs | 7 +- .../Volo/CmsKit/Pages/PageManager.cs | 115 ++++++----- .../Volo/CmsKit/Pages/EfCorePageRepository.cs | 4 +- .../MongoDB/Pages/MongoPageRepository.cs | 4 +- .../Public/Pages/PagePublicAppService.cs | 17 +- .../Pages/PageManager_Test.cs | 190 ++++++++++-------- .../Pages/PageRepository_Test.cs | 182 ++++++++--------- 11 files changed, 306 insertions(+), 250 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/MultipleHomePageException.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 6ee4a07fc2..2b1cd10b89 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 @@ -91,14 +91,9 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi public virtual async Task SetAsHomePageAsync(Guid id) { var page = await PageRepository.GetAsync(id); - if (!page.IsHomePage) - { - await PageManager.SetHomePageAsFalseAsync(true); - page = await PageRepository.GetAsync(id); - } - page.IsHomePage = !page.IsHomePage; ; + await PageManager.SetHomePageAsync(page); - await PageRepository.UpdateAsync(page); + await PageRepository.UpdateAsync(page); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs index 773ca621a2..16e070769b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs @@ -11,7 +11,8 @@ public static class CmsKitErrorCodes public static class Pages { public const string SlugAlreadyExist = "CmsKit:Page:0001"; - } + public const string MultipleHomePage = "CmsKit:Page:0002"; + } public static class Ratings { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs index 20aab4ff8f..0b75c32d6b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs @@ -23,5 +23,5 @@ public interface IPageRepository : IBasicRepository Task ExistsAsync(string slug, CancellationToken cancellationToken = default); - Task FindByIsHomePageAsync(bool isHomePage, CancellationToken cancellationToken = default); + Task> GetListOfHomePagesAsync(CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/MultipleHomePageException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/MultipleHomePageException.cs new file mode 100644 index 0000000000..1cf4028e39 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/MultipleHomePageException.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Pages; + +[Serializable] +public class MultipleHomePageException : BusinessException +{ + public MultipleHomePageException() + { + Code = CmsKitErrorCodes.Pages.MultipleHomePage; + } + + public MultipleHomePageException(SerializationInfo serializationInfo, StreamingContext context) + : base(serializationInfo, context) + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs index 339a034ee6..449b07091b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs @@ -20,7 +20,7 @@ public class Page : FullAuditedAggregateRoot, IMultiTenant public virtual string Style { get; protected set; } - public virtual bool IsHomePage { get; set; } + public virtual bool IsHomePage { get; protected set; } protected Page() { @@ -68,4 +68,9 @@ public class Page : FullAuditedAggregateRoot, IMultiTenant { Style = Check.Length(style, nameof(style), PageConsts.MaxStyleLength); } + + internal void SetIsHomePage(bool isHomePage) + { + IsHomePage = isHomePage; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs index 8a85edfb25..a2cd7a3378 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Linq; +using System.Threading.Tasks; using JetBrains.Annotations; using Volo.Abp; using Volo.Abp.Domain.Services; @@ -7,59 +8,75 @@ namespace Volo.CmsKit.Pages; public class PageManager : DomainService { - protected IPageRepository PageRepository { get; } + protected IPageRepository PageRepository { get; } - public PageManager(IPageRepository pageRepository) - { - PageRepository = pageRepository; - } + public PageManager(IPageRepository pageRepository) + { + PageRepository = pageRepository; + } - public virtual async Task CreateAsync( - [NotNull] string title, - [NotNull] string slug, - [CanBeNull] string content = null, - [CanBeNull] string script = null, - [CanBeNull] string style = null) - { - Check.NotNullOrEmpty(title, nameof(title)); - Check.NotNullOrEmpty(slug, nameof(slug)); + public virtual async Task CreateAsync( + [NotNull] string title, + [NotNull] string slug, + [CanBeNull] string content = null, + [CanBeNull] string script = null, + [CanBeNull] string style = null) + { + Check.NotNullOrEmpty(title, nameof(title)); + Check.NotNullOrEmpty(slug, nameof(slug)); - await CheckPageSlugAsync(slug); + await CheckPageSlugAsync(slug); - return new Page( - GuidGenerator.Create(), - title, - slug, - content, - script, - style, - CurrentTenant.Id); - } + return new Page( + GuidGenerator.Create(), + title, + slug, + content, + script, + style, + CurrentTenant.Id); + } - public virtual async Task SetSlugAsync(Page page, string newSlug) - { - if (page.Slug != newSlug) - { - await CheckPageSlugAsync(newSlug); - page.SetSlug(newSlug); - } - } + public virtual async Task SetSlugAsync(Page page, string newSlug) + { + if (page.Slug != newSlug) + { + await CheckPageSlugAsync(newSlug); + page.SetSlug(newSlug); + } + } - public virtual async Task SetHomePageAsFalseAsync(bool isHomePage) - { - var page = await PageRepository.FindByIsHomePageAsync(isHomePage); - if (page is not null) - { - page.IsHomePage = false; - await PageRepository.UpdateAsync(page); - } - } + public virtual async Task SetHomePageAsync(Page page) + { + var currentHomePages = await PageRepository.GetListAsync(); - protected virtual async Task CheckPageSlugAsync(string slug) - { - if (await PageRepository.ExistsAsync(slug)) - { - throw new PageSlugAlreadyExistsException(slug); - } - } + foreach (var homePage in currentHomePages) + { + homePage.SetIsHomePage(false); + } + + await PageRepository.UpdateManyAsync(currentHomePages); + + page.SetIsHomePage(true); + } + + public virtual async Task GetHomePageAsync() + { + var currentHomePages = await PageRepository.GetListAsync(); + + if (currentHomePages.Count > 1) + { + throw new BusinessException("There can be only one home page."); + } + + return currentHomePages.FirstOrDefault(); + } + + protected virtual async Task CheckPageSlugAsync(string slug) + { + if (await PageRepository.ExistsAsync(slug)) + { + throw new PageSlugAlreadyExistsException(slug); + } + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs index e15689ace9..aefd834013 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs @@ -64,8 +64,8 @@ public class EfCorePageRepository : EfCoreRepository x.Slug == slug, GetCancellationToken(cancellationToken)); } - public virtual Task FindByIsHomePageAsync(bool isHomePage, CancellationToken cancellationToken = default) + public virtual Task> GetListOfHomePagesAsync(CancellationToken cancellationToken = default) { - return FindAsync(x => x.IsHomePage == isHomePage, cancellationToken: GetCancellationToken(cancellationToken)); + return GetListAsync(x => x.IsHomePage, cancellationToken: GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs index e5073fc374..d398e7de64 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -72,8 +72,8 @@ public class MongoPageRepository : MongoDbRepository FindByIsHomePageAsync(bool isHomePage, CancellationToken cancellationToken = default) + public virtual Task> GetListOfHomePagesAsync(CancellationToken cancellationToken = default) { - return FindAsync(x => x.IsHomePage == isHomePage, cancellationToken: GetCancellationToken(cancellationToken)); + return GetListAsync(x => x.IsHomePage, cancellationToken: GetCancellationToken(cancellationToken)); } } 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 c62839821c..b151775d8a 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 @@ -16,14 +16,15 @@ namespace Volo.CmsKit.Public.Pages; public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppService { protected IPageRepository PageRepository { get; } - protected ContentParser ContentParser { get; } - private readonly IDistributedCache _cache; + protected PageManager PageManager { get; } - public PagePublicAppService(IPageRepository pageRepository, ContentParser contentParser, IDistributedCache cache) + protected IDistributedCache PageCache { get; } + + public PagePublicAppService(IPageRepository pageRepository, PageManager pageManager, IDistributedCache pageCache) { PageRepository = pageRepository; - ContentParser = contentParser; - _cache = cache; + PageManager = pageManager; + PageCache = pageCache; } public virtual async Task FindBySlugAsync(string slug) @@ -40,10 +41,10 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe public virtual async Task FindDefaultHomePageAsync() { - var pageDto = await _cache.GetAsync("DefaultHomePage"); + var pageDto = await PageCache.GetAsync("DefaultHomePage"); if (pageDto is null) { - var page = await PageRepository.FindByIsHomePageAsync(true); + var page = await PageManager.GetHomePageAsync(); if (page is null) { return null; @@ -51,7 +52,7 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe pageDto = ObjectMapper.Map(page); - await _cache.SetAsync("DefaultHomePage", pageDto, + await PageCache.SetAsync("DefaultHomePage", pageDto, new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) }); } diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs index c674df49eb..71d02b1a0f 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs @@ -1,97 +1,111 @@ using System.Threading.Tasks; using Shouldly; +using Volo.CmsKit.Tags; using Xunit; namespace Volo.CmsKit.Pages; public class PageManager_Test : CmsKitDomainTestBase { - private readonly PageManager pageManager; - private readonly CmsKitTestData testData; - private readonly IPageRepository pageRepository; - - public PageManager_Test() - { - pageManager = GetRequiredService(); - testData = GetRequiredService(); - pageRepository = GetRequiredService(); - } - - [Fact] - public async Task CreateAsync_ShouldWorkProperly_WithNonExistingSlug() - { - var title = "My awesome page"; - var slug = "my-awesome-page"; - var content = "

My Awesome Page

This is my awesome page content!

"; - - var page = await pageManager.CreateAsync(title, slug, content); - - page.ShouldNotBeNull(); - page.Title.ShouldBe(title); - page.Slug.ShouldBe(slug); - page.Content.ShouldBe(content); - } - - [Fact] - public async Task CreateAsync_ShouldThrowException_WithExistingSlug() - { - var title = "My awesome page"; - var slug = testData.Page_1_Slug; - var content = "

My Awesome Page

This is my awesome page content!

"; - - var exception = await Should.ThrowAsync(async () => - await pageManager.CreateAsync(title, slug, content)); - - exception.ShouldNotBeNull(); - } - - [Fact] - public async Task SetSlugAsync_ShouldWorkProperly_WithNonExistingSlug() - { - var newSlug = "freshly-generated-new-slug"; - var page = await pageRepository.GetAsync(testData.Page_1_Id); - - await pageManager.SetSlugAsync(page, newSlug); - - page.Slug.ShouldBe(newSlug); - } - - [Fact] - public async Task SetSlugAsync_ShouldThrowException_WithExistingSlug() - { - var newSlug = testData.Page_2_Slug; - var page = await pageRepository.GetAsync(testData.Page_1_Id); - - var exception = await Should.ThrowAsync(async () => - await pageManager.SetSlugAsync(page, newSlug)); - - exception.ShouldNotBeNull(); - } - - [Fact] - public async Task SetHomePageAsFalseAsync_ShouldWorkProperly_IfExistHomePage() - { - var page = await pageRepository.GetAsync(testData.Page_1_Id); - page.IsHomePage = true; - await pageRepository.UpdateAsync(page); - - await pageManager.SetHomePageAsFalseAsync(true); - - page.IsHomePage.ShouldBeTrue(); - - var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); - pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); - } - - [Fact] - public async Task SetHomePageAsFalseAsync_ShouldWorkProperly_IfNotExistHomePage() - { - var page = await pageRepository.GetAsync(testData.Page_1_Id); - page.IsHomePage = true; - await pageManager.SetHomePageAsFalseAsync(true); - page.IsHomePage.ShouldBeTrue(); - - var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); - pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); - } + private readonly PageManager pageManager; + private readonly CmsKitTestData testData; + private readonly IPageRepository pageRepository; + + public PageManager_Test() + { + pageManager = GetRequiredService(); + testData = GetRequiredService(); + pageRepository = GetRequiredService(); + } + + [Fact] + public async Task CreateAsync_ShouldWorkProperly_WithNonExistingSlug() + { + var title = "My awesome page"; + var slug = "my-awesome-page"; + var content = "

My Awesome Page

This is my awesome page content!

"; + + var page = await pageManager.CreateAsync(title, slug, content); + + page.ShouldNotBeNull(); + page.Title.ShouldBe(title); + page.Slug.ShouldBe(slug); + page.Content.ShouldBe(content); + } + + [Fact] + public async Task CreateAsync_ShouldThrowException_WithExistingSlug() + { + var title = "My awesome page"; + var slug = testData.Page_1_Slug; + var content = "

My Awesome Page

This is my awesome page content!

"; + + var exception = await Should.ThrowAsync(async () => + await pageManager.CreateAsync(title, slug, content)); + + exception.ShouldNotBeNull(); + } + + [Fact] + public async Task SetSlugAsync_ShouldWorkProperly_WithNonExistingSlug() + { + var newSlug = "freshly-generated-new-slug"; + var page = await pageRepository.GetAsync(testData.Page_1_Id); + + await pageManager.SetSlugAsync(page, newSlug); + + page.Slug.ShouldBe(newSlug); + } + + [Fact] + public async Task SetSlugAsync_ShouldThrowException_WithExistingSlug() + { + var newSlug = testData.Page_2_Slug; + var page = await pageRepository.GetAsync(testData.Page_1_Id); + + var exception = await Should.ThrowAsync(async () => + await pageManager.SetSlugAsync(page, newSlug)); + + exception.ShouldNotBeNull(); + } + + [Fact] + public async Task SetHomePageAsync_ShouldWorkProperly_IfExistHomePage() + { + var page = await pageRepository.GetAsync(testData.Page_1_Id); + + await pageManager.SetHomePageAsync(page); + + await pageRepository.UpdateAsync(page); + + page.IsHomePage.ShouldBeTrue(); + + var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); + pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); + } + + [Fact] + public async Task SetHomePageAsync_ShouldFix_WhenMultipleHomePageExist() + { + await WithUnitOfWorkAsync(async () => + { + var page1 = await pageRepository.GetAsync(testData.Page_1_Id); + var page2 = await pageRepository.GetAsync(testData.Page_2_Id); + + page1.SetIsHomePage(true); + page2.SetIsHomePage(true); + + await pageRepository.UpdateManyAsync(new[] { page1, page2 }, autoSave: true); + + await pageManager.SetHomePageAsync(page1); + }); + + var page1 = await pageRepository.GetAsync(testData.Page_1_Id); + var page2 = await pageRepository.GetAsync(testData.Page_2_Id); + + page2 = await pageRepository.GetAsync(testData.Page_2_Id); + + page1.IsHomePage.ShouldBeTrue(); + page2.IsHomePage.ShouldBeFalse(); + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs index 09be4fff6e..dcdcef5ad3 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs @@ -7,96 +7,96 @@ using Xunit; namespace Volo.CmsKit.Pages; public abstract class PageRepository_Test : CmsKitTestBase - where TStartupModule : IAbpModule + where TStartupModule : IAbpModule { - private readonly CmsKitTestData _cmsKitTestData; - private readonly IPageRepository _pageRepository; - - protected PageRepository_Test() - { - _cmsKitTestData = GetRequiredService(); - _pageRepository = GetRequiredService(); - } - - [Fact] - public async Task CountAsync() - { - var totalCount = await _pageRepository.GetCountAsync(); - - totalCount.ShouldBe(2); - - var filteredCount = await _pageRepository.GetCountAsync(_cmsKitTestData.Page_2_Title); - - filteredCount.ShouldBe(1); - } - - [Fact] - public async Task GetListAsync() - { - var list = await _pageRepository.GetListAsync(); - - list.ShouldNotBeNull(); - list.Count.ShouldBe(2); - - var list_page_1 = await _pageRepository.GetListAsync(maxResultCount: 1); - var list_page_2 = await _pageRepository.GetListAsync(maxResultCount: 1, skipCount: 1); - - list_page_1.ShouldNotBeNull(); - list_page_1.Count.ShouldBe(1); - list_page_1.First().Title.ShouldBe(_cmsKitTestData.Page_1_Title); - - list_page_2.ShouldNotBeNull(); - list_page_1.Count.ShouldBe(1); - list_page_2.First().Title.ShouldBe(_cmsKitTestData.Page_2_Title); - } - - [Fact] - public async Task ShouldGetByUrlAsync() - { - var page = await _pageRepository.GetBySlugAsync(_cmsKitTestData.Page_1_Slug); - - page.ShouldNotBeNull(); - page.Title.ShouldBe(_cmsKitTestData.Page_1_Title); - } - - [Fact] - public async Task ShouldFindByUrlAsync() - { - var page = await _pageRepository.FindBySlugAsync(_cmsKitTestData.Page_1_Slug); - - page.ShouldNotBeNull(); - page.Title.ShouldBe(_cmsKitTestData.Page_1_Title); - } - - [Fact] - public async Task ShouldNotFindByUrlAsync() - { - var page = await _pageRepository.FindBySlugAsync("not-exist-lyrics"); - - page.ShouldBeNull(); - } - - [Fact] - public async Task ShouldBeExistAsync() - { - var page = await _pageRepository.ExistsAsync(_cmsKitTestData.Page_1_Slug); - - page.ShouldBeTrue(); - } - - [Fact] - public async Task ShouldNotBeExistAsync() - { - var page = await _pageRepository.ExistsAsync("not-exist-lyrics"); - - page.ShouldBeFalse(); - } - - [Fact] - public async Task ShouldNotBeFindByIsHomePageAsync() - { - var page = await _pageRepository.FindByIsHomePageAsync(true); - - page.ShouldBeNull(); - } + private readonly CmsKitTestData _cmsKitTestData; + private readonly IPageRepository _pageRepository; + + protected PageRepository_Test() + { + _cmsKitTestData = GetRequiredService(); + _pageRepository = GetRequiredService(); + } + + [Fact] + public async Task CountAsync() + { + var totalCount = await _pageRepository.GetCountAsync(); + + totalCount.ShouldBe(2); + + var filteredCount = await _pageRepository.GetCountAsync(_cmsKitTestData.Page_2_Title); + + filteredCount.ShouldBe(1); + } + + [Fact] + public async Task GetListAsync() + { + var list = await _pageRepository.GetListAsync(); + + list.ShouldNotBeNull(); + list.Count.ShouldBe(2); + + var list_page_1 = await _pageRepository.GetListAsync(maxResultCount: 1); + var list_page_2 = await _pageRepository.GetListAsync(maxResultCount: 1, skipCount: 1); + + list_page_1.ShouldNotBeNull(); + list_page_1.Count.ShouldBe(1); + list_page_1.First().Title.ShouldBe(_cmsKitTestData.Page_1_Title); + + list_page_2.ShouldNotBeNull(); + list_page_1.Count.ShouldBe(1); + list_page_2.First().Title.ShouldBe(_cmsKitTestData.Page_2_Title); + } + + [Fact] + public async Task ShouldGetByUrlAsync() + { + var page = await _pageRepository.GetBySlugAsync(_cmsKitTestData.Page_1_Slug); + + page.ShouldNotBeNull(); + page.Title.ShouldBe(_cmsKitTestData.Page_1_Title); + } + + [Fact] + public async Task ShouldFindByUrlAsync() + { + var page = await _pageRepository.FindBySlugAsync(_cmsKitTestData.Page_1_Slug); + + page.ShouldNotBeNull(); + page.Title.ShouldBe(_cmsKitTestData.Page_1_Title); + } + + [Fact] + public async Task ShouldNotFindByUrlAsync() + { + var page = await _pageRepository.FindBySlugAsync("not-exist-lyrics"); + + page.ShouldBeNull(); + } + + [Fact] + public async Task ShouldBeExistAsync() + { + var page = await _pageRepository.ExistsAsync(_cmsKitTestData.Page_1_Slug); + + page.ShouldBeTrue(); + } + + [Fact] + public async Task ShouldNotBeExistAsync() + { + var page = await _pageRepository.ExistsAsync("not-exist-lyrics"); + + page.ShouldBeFalse(); + } + + [Fact] + public async Task ShouldntFindByIsHomePageAsync() + { + var pages = await _pageRepository.GetListOfHomePagesAsync(); + + pages.ShouldBeEmpty(); + } }