diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs index 0953bf2c00..fc8cbc9e0e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs @@ -1,6 +1,7 @@ using System; using Volo.Abp.Application.Dtos; using Volo.Abp.Auditing; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -24,4 +25,6 @@ public class BlogPostListDto : EntityDto, IHasCreationTime, IHasModificati public DateTime CreationTime { get; set; } public DateTime? LastModificationTime { get; set; } + + public BlogPostStatus? Status { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 58ea5b9b83..9968f6610c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -42,13 +42,15 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blog = await BlogRepository.GetAsync(input.BlogId); var blogPost = await BlogPostManager.CreateAsync( - author, - blog, - input.Title, - input.Slug, - input.ShortDescription, - input.Content, - input.CoverImageMediaId); + author, + blog, + input.Title, + input.Slug, + BlogPostStatus.Draft, + input.ShortDescription, + input.Content, + input.CoverImageMediaId + ); await BlogPostRepository.InsertAsync(blogPost); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs new file mode 100644 index 0000000000..e0a2385d7e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit.Blogs; + +public enum BlogPostStatus +{ + Draft, + Published +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs index faf6c4bcb6..5116d0a95e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs @@ -29,7 +29,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant public Guid AuthorId { get; set; } public virtual CmsUser Author { get; set; } - + + public virtual BlogPostStatus Status { get; set; } + protected BlogPost() { } @@ -43,7 +45,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant [CanBeNull] string shortDescription = null, [CanBeNull] string content = null, [CanBeNull] Guid? coverImageMediaId = null, - [CanBeNull] Guid? tenantId = null) : base(id) + [CanBeNull] Guid? tenantId = null, + [CanBeNull] BlogPostStatus? state = null + ) : base(id) { TenantId = tenantId; BlogId = blogId; @@ -53,6 +57,7 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant SetShortDescription(shortDescription); SetContent(content); CoverImageMediaId = coverImageMediaId; + Status = state ?? BlogPostStatus.Draft; } public virtual void SetTitle(string title) @@ -76,4 +81,14 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant { Content = Check.Length(content, nameof(content), BlogPostConsts.MaxContentLength); } + + public virtual void SetDraft() + { + Status = BlogPostStatus.Draft; + } + + public virtual void SetPublished() + { + Status = BlogPostStatus.Published; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs index a19643308d..9e21078707 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs @@ -30,6 +30,7 @@ public class BlogPostManager : DomainService [NotNull] Blog blog, [NotNull] string title, [NotNull] string slug, + [NotNull] BlogPostStatus status, [CanBeNull] string shortDescription = null, [CanBeNull] string content = null, [CanBeNull] Guid? coverImageMediaId = null) @@ -40,17 +41,18 @@ public class BlogPostManager : DomainService Check.NotNullOrEmpty(slug, nameof(slug)); var blogPost = new BlogPost( - GuidGenerator.Create(), - blog.Id, - author.Id, - title, - slug, - shortDescription, - content, - coverImageMediaId, - CurrentTenant.Id - ); - + GuidGenerator.Create(), + blog.Id, + author.Id, + title, + slug, + shortDescription, + content, + coverImageMediaId, + CurrentTenant.Id, + status + ); + await CheckSlugExistenceAsync(blog.Id, blogPost.Slug); return blogPost; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index fed0eed037..d73512a204 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -13,12 +13,14 @@ public interface IBlogPostRepository : IBasicRepository string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, CancellationToken cancellationToken = default); Task> GetListAsync( string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cfc39a62c7..cc78ffa698 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -42,12 +42,14 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) - .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter) + .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); var count = await queryable.CountAsync(GetCancellationToken(cancellationToken)); return count; @@ -57,6 +59,7 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting);