CmsKit - Change BlogPostManager Creating method

pull/7845/head
enisn 5 years ago
parent 2b2d298ee6
commit e15945822c

@ -57,18 +57,21 @@ namespace Volo.CmsKit.Admin.Blogs
[Authorize(CmsKitAdminPermissions.BlogPosts.Create)]
public override async Task<BlogPostDto> CreateAsync(CreateBlogPostDto input)
{
_ = await UserLookupService.GetByIdAsync(CurrentUser.GetId());
var entity = await BlogPostManager
.CreateAsync(
new BlogPost(
GuidGenerator.Create(),
input.BlogId,
input.Title,
input.Slug,
input.ShortDescription));
return await MapToGetOutputDtoAsync(entity);
var author = await UserLookupService.GetByIdAsync(CurrentUser.GetId());
var blog = await BlogRepository.GetAsync(input.BlogId);
var blogPost = await BlogPostManager.CreateAsync(
author,
blog,
input.Title,
input.Slug,
input.ShortDescription,
CurrentTenant.Id);
await Repository.InsertAsync(blogPost);
return await MapToGetOutputDtoAsync(blogPost);
}
[Authorize(CmsKitAdminPermissions.BlogPosts.Update)]
@ -77,14 +80,13 @@ namespace Volo.CmsKit.Admin.Blogs
var blogPost = await BlogPostRepository.GetAsync(id);
blogPost.SetTitle(input.Title);
blogPost.SetShortDescription(input.ShortDescription);
if (blogPost.Slug != input.Slug)
{
await BlogPostManager.SetSlugUrlAsync(blogPost, input.Slug);
}
MapToEntity(input, blogPost);
await BlogPostManager.UpdateAsync(blogPost);
return await MapToGetOutputDtoAsync(blogPost);

@ -8,7 +8,7 @@ using Volo.CmsKit.Users;
namespace Volo.CmsKit.Blogs
{
public class BlogPost : FullAuditedAggregateRootWithUser<Guid, CmsUser>, IMultiTenant
public class BlogPost : FullAuditedAggregateRoot<Guid>, IMultiTenant
{
public virtual Guid BlogId { get; protected set; }
@ -23,18 +23,25 @@ namespace Volo.CmsKit.Blogs
public virtual Guid? TenantId { get; protected set; }
[NotNull]
public Guid AuthorId { get; set; }
public virtual CmsUser Author { get; set; }
protected BlogPost()
{
}
public BlogPost(
internal BlogPost(
Guid id,
Guid blogId,
Guid authorId,
[NotNull] string title,
[NotNull] string slug,
[CanBeNull] string shortDescription = null) : base(id)
{
BlogId = blogId;
AuthorId = authorId;
SetTitle(title);
SetSlug(slug);
ShortDescription = shortDescription;

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Services;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.Blogs
{
@ -20,13 +21,31 @@ namespace Volo.CmsKit.Blogs
BlogRepository = blogRepository;
}
public virtual async Task<BlogPost> CreateAsync(BlogPost blogPost)
public virtual async Task<BlogPost> CreateAsync(
[NotNull] CmsUser author,
[NotNull] Blog blog,
[NotNull] string title,
[NotNull] string slug,
[CanBeNull] string shortDescription = null,
[CanBeNull] Guid? tenantId = null)
{
await CheckBlogExistenceAsync(blogPost.BlogId);
Check.NotNull(author, nameof(author));
Check.NotNull(blog, nameof(blog));
await CheckBlogExistenceAsync(blog.Id);
var blogPost = new BlogPost(
GuidGenerator.Create(),
blog.Id,
author.Id,
Check.NotNullOrEmpty(title, nameof(title)),
Check.NotNullOrEmpty(slug, nameof(slug)),
shortDescription
);
await CheckSlugExistenceAsync(blogPost.BlogId, blogPost.Slug);
await CheckSlugExistenceAsync(blog.Id, blogPost.Slug);
return await BlogPostRepository.InsertAsync(blogPost);
return blogPost;
}
public virtual async Task UpdateAsync(BlogPost blogPost)

@ -1,11 +1,19 @@
using JetBrains.Annotations;
using System;
using System.Threading.Tasks;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.Blogs
{
public interface IBlogPostManager
{
Task<BlogPost> CreateAsync(BlogPost blogPost);
Task<BlogPost> CreateAsync(
[NotNull] CmsUser author,
[NotNull] Blog blog,
[NotNull] string title,
[NotNull] string slug,
[CanBeNull] string shortDescription = null,
[CanBeNull] Guid? tenantId = null);
Task UpdateAsync(BlogPost blogPost);

@ -13,6 +13,7 @@ using System.Data.Common;
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.Blogs
{
@ -69,7 +70,16 @@ namespace Volo.CmsKit.Blogs
public override async Task<IQueryable<BlogPost>> WithDetailsAsync()
{
return (await GetDbSetAsync()).Include(i => i.Creator);
var dbContext = await GetDbContextAsync();
var blogPosts = await GetDbSetAsync();
var users = dbContext.Set<CmsUser>();
//var query = blogPosts.Join(users, o => o.AuthorId, i => i.Id, (blogPost, user) => new
//BlogPost
//{
//});
return (await GetDbSetAsync());
}
}
}

@ -214,6 +214,8 @@ namespace Volo.CmsKit.EntityFrameworkCore
b.Property(p => p.ShortDescription).HasMaxLength(BlogPostConsts.MaxShortDescriptionLength);
b.Property(p => p.AuthorId).IsRequired();
b.HasIndex(x => new { x.Slug, x.BlogId });
});

@ -5,7 +5,9 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Guids;
using Volo.Abp.Users;
using Volo.CmsKit.Tags;
using Volo.CmsKit.Users;
using Xunit;
namespace Volo.CmsKit.Blogs
@ -15,28 +17,33 @@ namespace Volo.CmsKit.Blogs
private readonly IBlogPostManager blogPostManager;
private readonly IGuidGenerator guidGenerator;
private readonly IBlogPostRepository blogPostRepository;
private readonly IBlogRepository blogRepository;
private readonly ICmsUserRepository userRepository;
private readonly CmsKitTestData cmsKitTestData;
public BlogPostManager_Tests()
{
this.blogPostManager = GetRequiredService<IBlogPostManager>();
this.guidGenerator = GetRequiredService<IGuidGenerator>();
this.blogPostRepository = GetRequiredService<IBlogPostRepository>();
this.cmsKitTestData = GetRequiredService<CmsKitTestData>();
blogPostManager = GetRequiredService<IBlogPostManager>();
guidGenerator = GetRequiredService<IGuidGenerator>();
blogPostRepository = GetRequiredService<IBlogPostRepository>();
blogRepository = GetRequiredService<IBlogRepository>();
cmsKitTestData = GetRequiredService<CmsKitTestData>();
userRepository = GetRequiredService<ICmsUserRepository>();
}
[Fact]
public async Task CreateAsync_ShouldWorkProperly_WithCorrectData()
public async Task CreateAsync_ShouldWorkProperly_WithExistingUserAndBlog()
{
var title = "New blog post";
var slug = "new-blog-post";
var created = await blogPostManager.CreateAsync(
new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, title, slug));
var author = await userRepository.GetAsync(cmsKitTestData.User1Id);
created.Id.ShouldNotBe(Guid.Empty);
var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id);
var blogPost = await blogPostRepository.GetAsync(created.Id);
var blogPost = await blogPostManager.CreateAsync(author, blog, title, slug);
blogPost.Id.ShouldNotBe(Guid.Empty);
blogPost.Title.ShouldBe(title);
blogPost.Slug.ShouldBe(slug);
}
@ -44,10 +51,13 @@ namespace Volo.CmsKit.Blogs
[Fact]
public async Task CreateAsync_ShouldThrowException_WhenSlugAlreadyExists()
{
var blogPost = new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, "Any New Title", cmsKitTestData.BlogPost_1_Slug);
var author = await userRepository.GetAsync(cmsKitTestData.User1Id);
var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id);
await Should.ThrowAsync<BlogPostSlugAlreadyExistException>(async () =>
await blogPostManager.CreateAsync(blogPost));
await blogPostManager.CreateAsync(author, blog, "Any New Title", cmsKitTestData.BlogPost_1_Slug));
}
[Fact]

@ -41,6 +41,7 @@ namespace Volo.CmsKit
private readonly IBlogRepository _blogRepository;
private readonly IBlogFeatureRepository _blogFeatureRepository;
private readonly IBlogPostRepository _blogPostRepository;
private readonly IBlogPostManager _blogPostManager;
private readonly IOptions<CmsKitOptions> _options;
private readonly IOptions<CmsKitTagOptions> _tagOptions;
private readonly IMediaDescriptorRepository _mediaDescriptorRepository;
@ -60,6 +61,7 @@ namespace Volo.CmsKit
IPageRepository pageRepository,
IBlogRepository blogRepository,
IBlogPostRepository blogPostRepository,
IBlogPostManager blogPostmanager,
IBlogFeatureRepository blogFeatureRepository,
IEntityTagManager entityTagManager,
IOptions<CmsKitOptions> options,
@ -81,6 +83,7 @@ namespace Volo.CmsKit
_pageRepository = pageRepository;
_blogRepository = blogRepository;
_blogPostRepository = blogPostRepository;
_blogPostManager = blogPostmanager;
_blogFeatureRepository = blogFeatureRepository;
_options = options;
_tagOptions = tagOptions;
@ -131,10 +134,13 @@ namespace Volo.CmsKit
{
await _cmsUserRepository.InsertAsync(new CmsUser(new UserData(_cmsKitTestData.User1Id, "user1",
"user1@volo.com",
"user", "1")));
"user", "1")),
autoSave: true);
await _cmsUserRepository.InsertAsync(new CmsUser(new UserData(_cmsKitTestData.User2Id, "user2",
"user2@volo.com",
"user", "2")));
"user", "2")),
autoSave: true);
}
private async Task SeedCommentsAsync()
@ -325,11 +331,27 @@ namespace Volo.CmsKit
private async Task SeedBlogsAsync()
{
var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName, _cmsKitTestData.BlogSlug));
await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_1_Id, blog.Id, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_Slug, "Short desc 1"));
await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_2_Id, blog.Id, _cmsKitTestData.BlogPost_2_Title, _cmsKitTestData.BlogPost_2_Slug, "Short desc 2"));
var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName, _cmsKitTestData.BlogSlug), autoSave: true);
var author = await _cmsUserRepository.GetAsync(_cmsKitTestData.User1Id);
_cmsKitTestData.BlogPost_1_Id =
(await _blogPostRepository.InsertAsync(
await _blogPostManager.CreateAsync(
author,
blog,
_cmsKitTestData.BlogPost_1_Title,
_cmsKitTestData.BlogPost_1_Slug,
"Short desc 1"))).Id;
_cmsKitTestData.BlogPost_2_Id =
(await _blogPostRepository.InsertAsync(
await _blogPostManager.CreateAsync(
author,
blog,
_cmsKitTestData.BlogPost_2_Title,
_cmsKitTestData.BlogPost_2_Slug,
"Short desc 2"))).Id;
}
private async Task SeedBlogFeaturesAsync()

@ -79,13 +79,13 @@ namespace Volo.CmsKit
public string BlogSlug => "cms-blog";
public Guid BlogPost_1_Id { get; } = Guid.NewGuid();
public Guid BlogPost_1_Id { get; internal set; }
public string BlogPost_1_Title => "How to install CmsKit?";
public string BlogPost_1_Slug => "how-to-install-cms-kit";
public Guid BlogPost_2_Id { get; } = Guid.NewGuid();
public Guid BlogPost_2_Id { get; internal set; }
public string BlogPost_2_Title => "How to use CmsKit";

Loading…
Cancel
Save