CmsKit - Include Author in BlogPost for MongoDb

pull/7845/head
enisn 5 years ago
parent 923511ef39
commit 9a1b163c65

@ -23,16 +23,21 @@ namespace Volo.CmsKit.MongoDB.Blogs
{
}
public Task<BlogPost> GetBySlugAsync(Guid blogId, [NotNull] string slug,
public async Task<BlogPost> GetBySlugAsync(Guid blogId, [NotNull] string slug,
CancellationToken cancellationToken = default)
{
Check.NotNullOrEmpty(slug, nameof(slug));
return GetAsync(x =>
var blogPost = await GetAsync(x =>
x.BlogId == blogId &&
x.Slug.ToLower() == slug,
includeDetails: true,
cancellationToken: GetCancellationToken(cancellationToken));
var dbContext = await GetDbContextAsync();
blogPost.Author = await dbContext.Collection<CmsUser>().AsQueryable().FirstOrDefaultAsync(x => x.Id == blogPost.AuthorId);
return blogPost;
}
public async Task<int> GetCountAsync(Guid blogId, CancellationToken cancellationToken = default)
@ -48,9 +53,10 @@ namespace Volo.CmsKit.MongoDB.Blogs
{
var token = GetCancellationToken(cancellationToken);
var dbContext = await GetDbContextAsync(token);
var blogPostQueryable = await WithDetailsAsync();
var blogPostQueryable = dbContext.Collection<BlogPost>().AsQueryable();
var usersQueryable = dbContext.Collection<CmsUser>().AsQueryable();
var queryable = blogPostQueryable
IQueryable<BlogPost> queryable = blogPostQueryable
.Where(x => x.BlogId == blogId);
if (!sorting.IsNullOrWhiteSpace())
@ -58,11 +64,22 @@ namespace Volo.CmsKit.MongoDB.Blogs
queryable = queryable.OrderBy(sorting);
}
queryable = queryable
.Skip(skipCount)
.Take(maxResultCount);
var combinedQueryable = queryable
.Join(
usersQueryable,
o => o.AuthorId,
i => i.Id,
(blogPost, user) => new { blogPost, user })
.Skip(skipCount)
.Take(maxResultCount);
var combinedResult = await AsyncExecuter.ToListAsync(combinedQueryable, GetCancellationToken(cancellationToken));
return await AsyncExecuter.ToListAsync(queryable, token);
return combinedResult.Select(s =>
{
s.blogPost.Author = s.user;
return s.blogPost;
}).ToList();
}
public async Task<bool> SlugExistsAsync(Guid blogId, [NotNull] string slug,

@ -60,6 +60,18 @@ namespace Volo.CmsKit.Blogs
blogPost.Slug.ShouldBe(testData.BlogPost_1_Slug);
}
[Fact]
public async Task GetBySlugAsync_ShouldHaveAuthor_WithCorrectParameters()
{
var blogPost = await blogPostRepository.GetBySlugAsync(testData.Blog_Id, testData.BlogPost_1_Slug);
blogPost.ShouldNotBeNull();
blogPost.Id.ShouldBe(testData.BlogPost_1_Id);
blogPost.Slug.ShouldBe(testData.BlogPost_1_Slug);
blogPost.Author.ShouldNotBeNull();
blogPost.Author.Id.ShouldBe(testData.User1Id);
}
[Fact]
public async Task GetBySlugAsync_ShouldThrowException_WithNonExistingBlogPostSlug()
{
@ -92,6 +104,18 @@ namespace Volo.CmsKit.Blogs
result.Count.ShouldBe(2);
}
[Fact]
public async Task GetPagedListAsync_ShouldHaveAuthor_WithBlogId_WhileGetting10_WithoutSorting()
{
var result = await blogPostRepository.GetPagedListAsync(testData.Blog_Id, 0, 10, default);
result.ShouldNotBeNull();
result.ShouldNotBeEmpty();
result.Count.ShouldBe(2);
result.ForEach(blogPost => blogPost.Author.ShouldNotBeNull());
}
[Fact]
public async Task GetPagedListAsync_ShouldWorkProperly_WithBlogId_WhileGetting1_WithoutSorting()
{

Loading…
Cancel
Save