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 12 months 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 PageStatus Status { get; set; }
public static string GetKey(string 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>
{
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(
string filter = null,
PageStatus? status = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
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 PageStatus Status { get; protected set; }
protected Page()
{
}
@ -39,7 +41,8 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
string script = null,
string style = null,
string layoutName = null,
Guid? tenantId = null) : base(id)
Guid? tenantId = null,
PageStatus status = PageStatus.Draft) : base(id)
{
TenantId = tenantId;
@ -49,6 +52,7 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
SetScript(script);
SetStyle(style);
SetLayoutName(layoutName);
SetStatus(status);
}
public virtual void SetTitle(string title)
@ -85,4 +89,9 @@ public class Page : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVers
{
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 script = null,
[CanBeNull] string style = null,
[CanBeNull] string layoutName = null)
[CanBeNull] string layoutName = null,
PageStatus status = PageStatus.Draft)
{
Check.NotNullOrEmpty(title, nameof(title));
Check.NotNullOrEmpty(slug, nameof(slug));
@ -36,7 +37,8 @@ public class PageManager : DomainService
script,
style,
layoutName,
CurrentTenant.Id);
CurrentTenant.Id,
status);
}
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)
{
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,
PageStatus? status = null,
CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync()).WhereIf(
!filter.IsNullOrWhiteSpace(),
x =>
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(
string filter = null,
PageStatus? status = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string sorting = null,
@ -40,6 +43,7 @@ public class EfCorePageRepository : EfCoreRepository<ICmsKitDbContext, Page, Gui
!filter.IsNullOrWhiteSpace(),
x =>
x.Title.ToLower().Contains(filter.ToLower()) || x.Slug.Contains(filter))
.WhereIf(status.HasValue, x => x.Status == status)
.OrderBy(sorting.IsNullOrEmpty() ? nameof(Page.Title) : sorting)
.PageBy(skipCount, maxResultCount)
.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,
PageStatus? status = null,
CancellationToken cancellationToken = default)
{
var cancellation = GetCancellationToken(cancellationToken);
@ -31,11 +32,13 @@ public class MongoPageRepository : MongoDbRepository<ICmsKitMongoDbContext, Page
!filter.IsNullOrWhiteSpace(),
u =>
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(
string filter = null,
PageStatus? status = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string sorting = null,
@ -47,6 +50,7 @@ public class MongoPageRepository : MongoDbRepository<ICmsKitMongoDbContext, Page
.WhereIf(
!filter.IsNullOrWhiteSpace(),
u => u.Title.ToLower().Contains(filter) || u.Slug.Contains(filter))
.WhereIf(status.HasValue, u => u.Status == status)
.OrderBy(sorting.IsNullOrEmpty() ? nameof(Page.Title) : sorting)
.PageBy(skipCount, maxResultCount)
.ToListAsync(cancellation);

Loading…
Cancel
Save