diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs index f0485cc344..3544b3d7af 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index d63a3317ce..da565413b1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -17,7 +17,7 @@ namespace Volo.CmsKit.Admin.Blogs [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Authorize(CmsKitAdminPermissions.Blogs.Default)] - [Route("api/cms-kit-admin/blogs/blogs")] + [Route("api/cms-kit-admin/blogs")] public class BlogAdminController : CmsKitAdminController, IBlogAdminAppService { protected IBlogAdminAppService BlogAdminAppService { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index 79c496970c..832ed4385e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -20,18 +20,20 @@ namespace Volo.CmsKit.Blogs TenantId = tenantId; } - public string Name { get; protected set; } + [NotNull] + public virtual string Name { get; protected set; } - public string Slug { get; protected set; } + [NotNull] + public virtual string Slug { get; protected set; } - public Guid? TenantId { get; protected set; } + public virtual Guid? TenantId { get; protected set; } - public void SetName(string name) + public virtual void SetName(string name) { Name = Check.NotNullOrWhiteSpace(name, nameof(name), maxLength: BlogConsts.MaxNameLength); } - public void SetSlug(string slug) + public virtual void SetSlug(string slug) { Check.NotNullOrWhiteSpace(slug, nameof(slug), maxLength: BlogConsts.MaxNameLength); 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 7a52fe0d9f..2e4949cd84 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 @@ -1,10 +1,8 @@ using JetBrains.Annotations; using System; -using System.Text.RegularExpressions; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; -using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs.Extensions; using Volo.CmsKit.Users; @@ -12,15 +10,18 @@ namespace Volo.CmsKit.Blogs { public class BlogPost : FullAuditedAggregateRootWithUser, IMultiTenant { - public Guid BlogId { get; protected set; } + public virtual Guid BlogId { get; protected set; } - public string Title { get; protected set; } + [NotNull] + public virtual string Title { get; protected set; } - public string Slug { get; protected set; } + [NotNull] + public virtual string Slug { get; protected set; } - public string ShortDescription { get; protected set; } + [NotNull] + public virtual string ShortDescription { get; protected set; } - public Guid? TenantId { get; protected set; } + public virtual Guid? TenantId { get; protected set; } protected BlogPost() { @@ -39,7 +40,7 @@ namespace Volo.CmsKit.Blogs ShortDescription = shortDescription; } - public void SetTitle(string title) + public virtual void SetTitle(string title) { Title = Check.NotNullOrWhiteSpace(title, nameof(title), BlogPostConsts.MaxTitleLength); } @@ -51,7 +52,7 @@ namespace Volo.CmsKit.Blogs Slug = slug.NormalizeSlug(); } - public void SetShortDescription(string shortDescription) + public virtual void SetShortDescription(string shortDescription) { ShortDescription = Check.Length(shortDescription, nameof(shortDescription), BlogPostConsts.MaxShortDescriptionLength); } 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 aed2b9fffd..7ba85f8ce6 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 @@ -1,8 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using JetBrains.Annotations; +using System; using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Services; @@ -10,35 +9,37 @@ namespace Volo.CmsKit.Blogs { public class BlogPostManager : DomainService, IBlogPostManager { - protected readonly IBlogPostRepository blogPostRepository; - protected readonly IBlogRepository blogRepository; + protected IBlogPostRepository BlogPostRepository { get; } + protected IBlogRepository BlogRepository { get; } public BlogPostManager( IBlogPostRepository blogPostRepository, IBlogRepository blogRepository) { - this.blogPostRepository = blogPostRepository; - this.blogRepository = blogRepository; + BlogPostRepository = blogPostRepository; + BlogRepository = blogRepository; } - public async Task CreateAsync(BlogPost blogPost) + public virtual async Task CreateAsync(BlogPost blogPost) { await CheckBlogExistenceAsync(blogPost.BlogId); await CheckSlugExistenceAsync(blogPost.BlogId, blogPost.Slug); - return await blogPostRepository.InsertAsync(blogPost); + return await BlogPostRepository.InsertAsync(blogPost); } - public async Task UpdateAsync(BlogPost blogPost) + public virtual async Task UpdateAsync(BlogPost blogPost) { await CheckBlogExistenceAsync(blogPost.BlogId); - await blogPostRepository.UpdateAsync(blogPost); + await BlogPostRepository.UpdateAsync(blogPost); } - public async Task SetSlugUrlAsync(BlogPost blogPost, string newSlug) + public virtual async Task SetSlugUrlAsync(BlogPost blogPost, [NotNull] string newSlug) { + Check.NotNullOrWhiteSpace(newSlug, nameof(newSlug)); + await CheckSlugExistenceAsync(blogPost.BlogId, newSlug); blogPost.SetSlug(newSlug); @@ -46,7 +47,7 @@ namespace Volo.CmsKit.Blogs private async Task CheckSlugExistenceAsync(Guid blogId, string slug) { - if (await blogPostRepository.SlugExistsAsync(blogId, slug)) + if (await BlogPostRepository.SlugExistsAsync(blogId, slug)) { throw new BlogPostSlugAlreadyExistException(blogId, slug); } @@ -54,7 +55,7 @@ namespace Volo.CmsKit.Blogs private async Task CheckBlogExistenceAsync(Guid blogId) { - if (!await blogRepository.ExistsAsync(blogId)) + if (!await BlogRepository.ExistsAsync(blogId)) throw new EntityNotFoundException(typeof(Blog), blogId); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostSlugAlreadyExistException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostSlugAlreadyExistException.cs index 8e59249299..034cb8e60d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostSlugAlreadyExistException.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostSlugAlreadyExistException.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Serialization; using Volo.Abp; namespace Volo.CmsKit.Blogs @@ -9,7 +10,7 @@ namespace Volo.CmsKit.Blogs { } - internal BlogPostSlugAlreadyExistException(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext context) : base(serializationInfo, context) + internal BlogPostSlugAlreadyExistException(SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext context) : base(serializationInfo, context) { } @@ -24,8 +25,8 @@ namespace Volo.CmsKit.Blogs WithData(nameof(BlogId), BlogId); } - public string Slug { get; } + public virtual string Slug { get; } - public Guid BlogId { get; } + public virtual Guid BlogId { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs index 5027fa8e38..9a3afebf71 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs @@ -1,4 +1,4 @@ -using System; +using JetBrains.Annotations; using System.Threading.Tasks; namespace Volo.CmsKit.Blogs @@ -9,6 +9,6 @@ namespace Volo.CmsKit.Blogs Task UpdateAsync(BlogPost blogPost); - Task SetSlugUrlAsync(BlogPost blogPost, string newSlug); + Task SetSlugUrlAsync(BlogPost blogPost, [NotNull] string newSlug); } } 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 198cfca104..943ea381f3 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 @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs index 4213884057..2feb057111 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -6,7 +7,7 @@ namespace Volo.CmsKit.Blogs { public interface IBlogRepository : IBasicRepository { - public Task GetBySlugAsync(string slug); - Task ExistsAsync(Guid blogId); + public Task GetBySlugAsync(string slug, CancellationToken cancellationToken = default); + Task ExistsAsync(Guid blogId, CancellationToken cancellationToken = default); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs index d2ddbf35aa..f04889299c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using System; using System.Security.Cryptography.X509Certificates; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -14,14 +15,14 @@ namespace Volo.CmsKit.Blogs { } - public async Task ExistsAsync(Guid blogId) + public virtual async Task ExistsAsync(Guid blogId, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).AnyAsync(x => x.Id == blogId); + return await (await GetQueryableAsync()).AnyAsync(x => x.Id == blogId, cancellationToken); } - public Task GetBySlugAsync(string slug) + public virtual Task GetBySlugAsync(string slug, CancellationToken cancellationToken = default) { - return GetAsync(x => x.Slug == slug); + return GetAsync(x => x.Slug == slug, cancellationToken: cancellationToken); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs index d733f82bf6..2b215d55c6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs @@ -1,5 +1,6 @@ using MongoDB.Driver.Core.Operations; using System; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -13,16 +14,17 @@ namespace Volo.CmsKit.MongoDB.Blogs { } - public async Task ExistsAsync(Guid blogId) + public virtual async Task ExistsAsync(Guid blogId, CancellationToken cancellationToken = default) { return await AsyncExecuter.AnyAsync( await GetQueryableAsync(), - x => x.Id == blogId); + x => x.Id == blogId, + cancellationToken); } - public Task GetBySlugAsync(string slug) + public virtual Task GetBySlugAsync(string slug, CancellationToken cancellationToken = default) { - return GetAsync(x => x.Slug == slug); + return GetAsync(x => x.Slug == slug, cancellationToken: cancellationToken); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 0c9079ee7e..04234b4f06 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -1,4 +1,5 @@ -using System; +using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; @@ -8,9 +9,9 @@ namespace Volo.CmsKit.Public.Blogs { public interface IBlogPostPublicAppService { - Task> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input); + Task> GetListAsync([NotNull] string blogSlug, PagedAndSortedResultRequestDto input); - Task GetAsync(string blogSlug, string blogPostSlug); + Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); Task GetCoverImageAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 3994720d73..644b4e4cc3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -1,4 +1,5 @@ -using System; +using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; @@ -26,7 +27,7 @@ namespace Volo.CmsKit.Public.Blogs BlobContainer = blobContainer; } - public async Task GetAsync(string blogSlug, string blogPostSlug) + public virtual async Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); @@ -35,7 +36,7 @@ namespace Volo.CmsKit.Public.Blogs return ObjectMapper.Map(blogPost); } - public async Task> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) + public virtual async Task> GetListAsync([NotNull] string blogSlug, PagedAndSortedResultRequestDto input) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); @@ -46,7 +47,7 @@ namespace Volo.CmsKit.Public.Blogs ObjectMapper.Map, List>(blogPosts)); } - public async Task GetCoverImageAsync(Guid id) + public virtual async Task GetCoverImageAsync(Guid id) { var stream = await BlobContainer.GetAsync(id.ToString()); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 7f3545ad9c..e22ef54545 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -1,15 +1,11 @@ using Microsoft.AspNetCore.Mvc; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Content; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Public.Blogs; namespace Volo.CmsKit.Public.Blogs { @@ -28,14 +24,14 @@ namespace Volo.CmsKit.Public.Blogs [HttpGet] [Route("{blogSlug}/{blogPostSlug}")] - public Task GetAsync(string blogSlug, string blogPostSlug) + public virtual Task GetAsync(string blogSlug, string blogPostSlug) { return BlogPostPublicAppService.GetAsync(blogSlug, blogPostSlug); } [HttpGet] [Route("{id}/cover-image")] - public Task GetCoverImageAsync(Guid id) + public virtual Task GetCoverImageAsync(Guid id) { Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); Response.Headers.Add("Accept-Ranges", "bytes"); @@ -47,7 +43,7 @@ namespace Volo.CmsKit.Public.Blogs [HttpGet] [Route("{blogSlug}")] - public Task> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) + public virtual Task> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) { return BlogPostPublicAppService.GetListAsync(blogSlug, input); }