Browse Source

Add PageStatus support to Page entities and repositories

Introduces the PageStatus enum and adds a Status property to Page and PageCacheItem. Updates PageManager, IPageRepository, EfCorePageRepository, and MongoPageRepository to support filtering and managing pages by status. This enables handling draft and published states for pages.
pull/24053/head
Mansur Besleney 1 year ago
parent
commit
caf4ae75ee
  1. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageCacheItem.cs
  2. 8
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageStatus.cs
  3. 3
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs
  4. 11
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs
  5. 12
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs
  6. 6
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs
  7. 6
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs

2
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageCacheItem.cs

@ -20,6 +20,8 @@ public class PageCacheItem : ExtensibleObject
public string Style { get; set; } public string Style { get; set; }
public PageStatus Status { get; set; }
public static string GetKey(string slug) public static string GetKey(string slug)
{ {
return $"CmsPage_{slug}"; return $"CmsPage_{slug}";

8
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageStatus.cs

@ -0,0 +1,8 @@
namespace Volo.CmsKit.Pages;
public enum PageStatus
{
Draft = 0,
Publish = 1
}

3
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs

@ -8,10 +8,11 @@ namespace Volo.CmsKit.Pages;
public interface IPageRepository : IBasicRepository<Page, Guid> public interface IPageRepository : IBasicRepository<Page, Guid>
{ {
Task<int> GetCountAsync(string filter = null, CancellationToken cancellationToken = default); Task<int> GetCountAsync(string filter = null, PageStatus? status = null, CancellationToken cancellationToken = default);
Task<List<Page>> GetListAsync( Task<List<Page>> GetListAsync(
string filter = null, string filter = null,
PageStatus? status = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,
string sorting = null, string sorting = null,

11
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs

@ -27,6 +27,8 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
public virtual string LayoutName { get; protected set; } public virtual string LayoutName { get; protected set; }
public virtual PageStatus Status { get; protected set; }
protected Page() protected Page()
{ {
} }
@ -39,7 +41,8 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
string script = null, string script = null,
string style = null, string style = null,
string layoutName = null, string layoutName = null,
Guid? tenantId = null) : base(id) Guid? tenantId = null,
PageStatus status = PageStatus.Draft) : base(id)
{ {
TenantId = tenantId; TenantId = tenantId;
@ -49,6 +52,7 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
SetScript(script); SetScript(script);
SetStyle(style); SetStyle(style);
SetLayoutName(layoutName); SetLayoutName(layoutName);
SetStatus(status);
} }
public virtual void SetTitle(string title) public virtual void SetTitle(string title)
@ -85,4 +89,9 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
{ {
IsHomePage = isHomePage; IsHomePage = isHomePage;
} }
public virtual void SetStatus(PageStatus status)
{
Status = status;
}
} }

12
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs

@ -21,7 +21,8 @@ public class PageManager : DomainService
[CanBeNull] string content = null, [CanBeNull] string content = null,
[CanBeNull] string script = null, [CanBeNull] string script = null,
[CanBeNull] string style = null, [CanBeNull] string style = null,
[CanBeNull] string layoutName = null) [CanBeNull] string layoutName = null,
PageStatus status = PageStatus.Draft)
{ {
Check.NotNullOrEmpty(title, nameof(title)); Check.NotNullOrEmpty(title, nameof(title));
Check.NotNullOrEmpty(slug, nameof(slug)); Check.NotNullOrEmpty(slug, nameof(slug));
@ -36,7 +37,8 @@ public class PageManager : DomainService
script, script,
style, style,
layoutName, layoutName,
CurrentTenant.Id); CurrentTenant.Id,
status);
} }
public virtual async Task SetSlugAsync(Page page, [NotNull] string newSlug) public virtual async Task SetSlugAsync(Page page, [NotNull] string newSlug)
@ -48,6 +50,12 @@ public class PageManager : DomainService
} }
} }
public virtual Task SetStatusAsync(Page page, PageStatus status)
{
page.SetStatus(status);
return Task.CompletedTask;
}
public virtual async Task SetHomePageAsync(Page page) public virtual async Task SetHomePageAsync(Page page)
{ {
var homePage = await GetHomePageAsync(); var homePage = await GetHomePageAsync();

6
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs

@ -20,17 +20,20 @@ public class EfCorePageRepository : EfCoreRepository<ICmsKitDbContext, Page, Gui
} }
public virtual async Task<int> GetCountAsync(string filter = null, public virtual async Task<int> GetCountAsync(string filter = null,
PageStatus? status = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await (await GetDbSetAsync()).WhereIf( return await (await GetDbSetAsync()).WhereIf(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
x => x =>
x.Title.ToLower().Contains(filter.ToLower()) || x.Slug.Contains(filter) x.Title.ToLower().Contains(filter.ToLower()) || x.Slug.Contains(filter)
).CountAsync(GetCancellationToken(cancellationToken)); ).WhereIf(status.HasValue, x => x.Status == status)
.CountAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<Page>> GetListAsync( public virtual async Task<List<Page>> GetListAsync(
string filter = null, string filter = null,
PageStatus? status = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,
string sorting = null, string sorting = null,
@ -40,6 +43,7 @@ public class EfCorePageRepository : EfCoreRepository<ICmsKitDbContext, Page, Gui
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
x => x =>
x.Title.ToLower().Contains(filter.ToLower()) || x.Slug.Contains(filter)) x.Title.ToLower().Contains(filter.ToLower()) || x.Slug.Contains(filter))
.WhereIf(status.HasValue, x => x.Status == status)
.OrderBy(sorting.IsNullOrEmpty() ? nameof(Page.Title) : sorting) .OrderBy(sorting.IsNullOrEmpty() ? nameof(Page.Title) : sorting)
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));

6
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs

@ -22,6 +22,7 @@ public class MongoPageRepository : MongoDbRepository<ICmsKitMongoDbContext, Page
} }
public virtual async Task<int> GetCountAsync(string filter = null, public virtual async Task<int> GetCountAsync(string filter = null,
PageStatus? status = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var cancellation = GetCancellationToken(cancellationToken); var cancellation = GetCancellationToken(cancellationToken);
@ -31,11 +32,13 @@ public class MongoPageRepository : MongoDbRepository<ICmsKitMongoDbContext, Page
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
u => u =>
u.Title.ToLower().Contains(filter.ToLower()) || u.Slug.Contains(filter) u.Title.ToLower().Contains(filter.ToLower()) || u.Slug.Contains(filter)
).CountAsync(cancellation); ).WhereIf(status.HasValue, u => u.Status == status)
.CountAsync(cancellation);
} }
public virtual async Task<List<Page>> GetListAsync( public virtual async Task<List<Page>> GetListAsync(
string filter = null, string filter = null,
PageStatus? status = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,
string sorting = null, string sorting = null,
@ -47,6 +50,7 @@ public class MongoPageRepository : MongoDbRepository<ICmsKitMongoDbContext, Page
.WhereIf( .WhereIf(
!filter.IsNullOrWhiteSpace(), !filter.IsNullOrWhiteSpace(),
u => u.Title.ToLower().Contains(filter) || u.Slug.Contains(filter)) u => u.Title.ToLower().Contains(filter) || u.Slug.Contains(filter))
.WhereIf(status.HasValue, u => u.Status == status)
.OrderBy(sorting.IsNullOrEmpty() ? nameof(Page.Title) : sorting) .OrderBy(sorting.IsNullOrEmpty() ? nameof(Page.Title) : sorting)
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
.ToListAsync(cancellation); .ToListAsync(cancellation);

Loading…
Cancel
Save