|
|
@ -12,15 +12,18 @@ using Volo.Abp.Domain.Entities; |
|
|
using Volo.Abp.Domain.Repositories.MongoDB; |
|
|
using Volo.Abp.Domain.Repositories.MongoDB; |
|
|
using Volo.Abp.MongoDB; |
|
|
using Volo.Abp.MongoDB; |
|
|
using Volo.CmsKit.Blogs; |
|
|
using Volo.CmsKit.Blogs; |
|
|
|
|
|
using Volo.CmsKit.Tags; |
|
|
using Volo.CmsKit.Users; |
|
|
using Volo.CmsKit.Users; |
|
|
|
|
|
|
|
|
namespace Volo.CmsKit.MongoDB.Blogs; |
|
|
namespace Volo.CmsKit.MongoDB.Blogs; |
|
|
|
|
|
|
|
|
public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, BlogPost, Guid>, IBlogPostRepository |
|
|
public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, BlogPost, Guid>, IBlogPostRepository |
|
|
{ |
|
|
{ |
|
|
public MongoBlogPostRepository(IMongoDbContextProvider<CmsKitMongoDbContext> dbContextProvider) : base( |
|
|
private EntityTagManager _entityTagManager; |
|
|
|
|
|
public MongoBlogPostRepository(IMongoDbContextProvider<CmsKitMongoDbContext> dbContextProvider, EntityTagManager entityTagManager) : base( |
|
|
dbContextProvider) |
|
|
dbContextProvider) |
|
|
{ |
|
|
{ |
|
|
|
|
|
_entityTagManager = entityTagManager; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public virtual async Task<BlogPost> GetBySlugAsync(Guid blogId, [NotNull] string slug, |
|
|
public virtual async Task<BlogPost> GetBySlugAsync(Guid blogId, [NotNull] string slug, |
|
|
@ -44,12 +47,20 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B |
|
|
string filter = null, |
|
|
string filter = null, |
|
|
Guid? blogId = null, |
|
|
Guid? blogId = null, |
|
|
Guid? authorId = null, |
|
|
Guid? authorId = null, |
|
|
|
|
|
Guid? tagId = null, |
|
|
BlogPostStatus? statusFilter = null, |
|
|
BlogPostStatus? statusFilter = null, |
|
|
CancellationToken cancellationToken = default) |
|
|
CancellationToken cancellationToken = default) |
|
|
{ |
|
|
{ |
|
|
cancellationToken = GetCancellationToken(cancellationToken); |
|
|
cancellationToken = GetCancellationToken(cancellationToken); |
|
|
|
|
|
|
|
|
|
|
|
List<string> entityIdFilters = null; |
|
|
|
|
|
if (tagId.HasValue) |
|
|
|
|
|
{ |
|
|
|
|
|
entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString())) |
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) |
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) |
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(blogId.HasValue, x => x.BlogId == blogId) |
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(blogId.HasValue, x => x.BlogId == blogId) |
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(authorId.HasValue, x => x.AuthorId == authorId) |
|
|
.WhereIf<BlogPost, IMongoQueryable<BlogPost>>(authorId.HasValue, x => x.AuthorId == authorId) |
|
|
@ -61,6 +72,7 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B |
|
|
string filter = null, |
|
|
string filter = null, |
|
|
Guid? blogId = null, |
|
|
Guid? blogId = null, |
|
|
Guid? authorId = null, |
|
|
Guid? authorId = null, |
|
|
|
|
|
Guid? tagId = null, |
|
|
BlogPostStatus? statusFilter = null, |
|
|
BlogPostStatus? statusFilter = null, |
|
|
int maxResultCount = int.MaxValue, |
|
|
int maxResultCount = int.MaxValue, |
|
|
int skipCount = 0, |
|
|
int skipCount = 0, |
|
|
@ -71,9 +83,16 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B |
|
|
var dbContext = await GetDbContextAsync(cancellationToken); |
|
|
var dbContext = await GetDbContextAsync(cancellationToken); |
|
|
var blogPostQueryable = await GetQueryableAsync(); |
|
|
var blogPostQueryable = await GetQueryableAsync(); |
|
|
|
|
|
|
|
|
|
|
|
List<string> entityIdFilters = null; |
|
|
|
|
|
if (tagId.HasValue) |
|
|
|
|
|
{ |
|
|
|
|
|
entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var usersQueryable = dbContext.Collection<CmsUser>().AsQueryable(); |
|
|
var usersQueryable = dbContext.Collection<CmsUser>().AsQueryable(); |
|
|
|
|
|
|
|
|
var queryable = blogPostQueryable |
|
|
var queryable = blogPostQueryable |
|
|
|
|
|
.WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString())) |
|
|
.WhereIf(blogId.HasValue, x => x.BlogId == blogId) |
|
|
.WhereIf(blogId.HasValue, x => x.BlogId == blogId) |
|
|
.WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) |
|
|
.WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) |
|
|
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId) |
|
|
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId) |
|
|
|