diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index e3ef03e2de..894060c966 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -27,8 +27,8 @@ public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppServi public BlogAdminAppService( IBlogRepository blogRepository, - BlogManager blogManager, - IBlogPostRepository blogPostRepository, + BlogManager blogManager, + IBlogPostRepository blogPostRepository, BlogFeatureManager blogFeatureManager = null) { BlogRepository = blogRepository; @@ -56,7 +56,7 @@ public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppServi input.Sorting, input.MaxResultCount, input.SkipCount); - + var blogDtos = new PagedResultDto(totalCount, ObjectMapper.Map, List>(blogs.Select(x => x.Blog).ToList())); foreach (var blogDto in blogDtos.Items) @@ -66,11 +66,11 @@ public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppServi return blogDtos; } - + public virtual async Task> GetAllListAsync() { var blogs = await BlogRepository.GetListWithBlogPostCountAsync(maxResultCount: int.MaxValue); - + var blogDtos = new ListResultDto(ObjectMapper.Map, List>(blogs.Select(x => x.Blog).ToList())); foreach (var blogDto in blogDtos.Items) @@ -86,7 +86,7 @@ public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppServi { var blog = await BlogManager.CreateAsync(input.Name, input.Slug); input.MapExtraPropertiesTo(blog); - + await BlogRepository.InsertAsync(blog, autoSave: true); await BlogFeatureManager.SetDefaultsAsync(blog.Id); @@ -107,7 +107,7 @@ public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppServi return ObjectMapper.Map(blog); } - + [Authorize(CmsKitAdminPermissions.Blogs.Delete)] public virtual async Task MoveAllBlogPostsAsync(Guid blogId, Guid? assignToBlogId) { @@ -116,9 +116,9 @@ public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppServi } [Authorize(CmsKitAdminPermissions.Blogs.Delete)] - public virtual Task DeleteAsync(Guid id) + public virtual async Task DeleteAsync(Guid id) { - - return BlogRepository.DeleteAsync(id); + await BlogPostRepository.DeleteByBlogIdAsync(id); + await BlogRepository.DeleteAsync(id); } } 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 e4d8980196..9612c0e5e5 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 @@ -48,4 +48,6 @@ public interface IBlogPostRepository : IBasicRepository Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default); Task UpdateBlogAsync(Guid sourceBlogId, Guid? targetBlogId = null, CancellationToken cancellationToken = default); -} \ No newline at end of file + + Task DeleteByBlogIdAsync(Guid blogId, CancellationToken cancellationToken = default); +} 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 02085f5dc5..d54256bd8d 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 @@ -176,27 +176,32 @@ public class EfCoreBlogPostRepository : EfCoreRepository> CreateAuthorsQueryableAsync() + protected virtual async Task> CreateAuthorsQueryableAsync() { return (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct(); } - + public virtual async Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, GetCancellationToken(cancellationToken)); } - - public async Task UpdateBlogAsync(Guid sourceBlogId, Guid? targetBlogId = null, CancellationToken cancellationToken = default) + + public virtual async Task UpdateBlogAsync(Guid sourceBlogId, Guid? targetBlogId = null, CancellationToken cancellationToken = default) { if (targetBlogId != null) { await (await GetDbSetAsync()).Where(x => x.BlogId == sourceBlogId).ExecuteUpdateAsync(x => x.SetProperty(b => b.BlogId, targetBlogId.Value), GetCancellationToken(cancellationToken)); - + } else { await (await GetDbSetAsync()).Where(x => x.BlogId == sourceBlogId).ExecuteDeleteAsync(GetCancellationToken(cancellationToken)); } } -} \ No newline at end of file + + public virtual async Task DeleteByBlogIdAsync(Guid blogId, CancellationToken cancellationToken = default) + { + await DeleteAsync(x => x.BlogId == blogId, cancellationToken: cancellationToken); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 0212e5975c..bb7ee21b17 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -23,7 +23,7 @@ public class MongoBlogPostRepository : MongoDbRepository dbContextProvider, + IMongoDbContextProvider dbContextProvider, MarkedItemManager markedItemManager, EntityTagManager entityTagManager) : base( dbContextProvider) @@ -63,7 +63,6 @@ public class MongoBlogPostRepository : MongoDbRepository>(tagFilteredEntityIds.Any(), x => tagFilteredEntityIds.Contains(x.Id)) .WhereIf>(favoriteUserFilteredEntityIds.Any(), x => favoriteUserFilteredEntityIds.Contains(x.Id)) @@ -89,7 +88,7 @@ public class MongoBlogPostRepository : MongoDbRepository> CreateAuthorsQueryableAsync(CancellationToken cancellationToken = default) + protected virtual async Task> CreateAuthorsQueryableAsync(CancellationToken cancellationToken = default) { cancellationToken = GetCancellationToken(cancellationToken); - + var blogPostQueryable = (await GetQueryableAsync()) .Where(x => x.Status == BlogPostStatus.Published); @@ -229,7 +228,7 @@ public class MongoBlogPostRepository : MongoDbRepository x.Status == BlogPostStatus.WaitingForReview, cancellationToken); } - public async Task UpdateBlogAsync(Guid sourceBlogId, Guid? targetBlogId, CancellationToken cancellationToken = default) + public virtual async Task UpdateBlogAsync(Guid sourceBlogId, Guid? targetBlogId, CancellationToken cancellationToken = default) { cancellationToken = GetCancellationToken(cancellationToken); var blogPosts = await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.BlogId == sourceBlogId).ToListAsync(cancellationToken); @@ -239,13 +238,18 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId, cancellationToken: cancellationToken); + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs index 5be7d312b5..731191a251 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs @@ -12,12 +12,14 @@ public class BlogAdminAppService_Tests : CmsKitApplicationTestBase protected IBlogAdminAppService BlogAdminAppService { get; } protected CmsKitTestData CmsKitTestData { get; } protected IBlogRepository BlogRepository { get; } + protected IBlogPostRepository BlogPostRepository { get; } public BlogAdminAppService_Tests() { BlogAdminAppService = GetRequiredService(); CmsKitTestData = GetRequiredService(); BlogRepository = GetRequiredService(); + BlogPostRepository = GetRequiredService(); } [Fact] @@ -81,11 +83,17 @@ public class BlogAdminAppService_Tests : CmsKitApplicationTestBase [Fact] public async Task DeleteAsync_ShouldWork() { + var posts = await BlogPostRepository.GetListAsync(); + posts.ShouldContain(x => x.BlogId == CmsKitTestData.Blog_Id); + await BlogAdminAppService.DeleteAsync(CmsKitTestData.Blog_Id); await Should.ThrowAsync( async () => await BlogAdminAppService.GetAsync(CmsKitTestData.Blog_Id) ); + + posts = await BlogPostRepository.GetListAsync(); + posts.ShouldNotContain(x => x.BlogId == CmsKitTestData.Blog_Id); } }