|
|
|
@ -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,
|
|
|
|
|