Browse Source

Merge pull request #23635 from abpframework/auto-merge/rel-9-3/3963

Merge branch dev with rel-9.3
pull/23638/head
Ma Liming 1 year ago
committed by GitHub
parent
commit
11b400856a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 108
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs
  2. 23
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs
  3. 9
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs
  4. 27
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml

108
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs

@ -58,31 +58,20 @@ public class EfCoreBlogPostRepository : EfCoreRepository<ICmsKitDbContext, BlogP
BlogPostStatus? statusFilter = null,
CancellationToken cancellationToken = default)
{
List<Guid> entityIdFilters = null;
if (tagId.HasValue)
{
entityIdFilters = (await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken)).Select(Guid.Parse).ToList();
}
var tagFilteredEntityIds = tagId.HasValue
? await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken)
: null;
var favoriteUserFilteredEntityIds = favoriteUserId.HasValue
? await _markedItemManager.GetEntityIdsFilteredByUserAsync(favoriteUserId.Value, BlogPostConsts.EntityType)
: null;
cancellationToken = GetCancellationToken(cancellationToken);
var tagFilteredEntityIds = await GetEntityIdsByTagId(tagId, cancellationToken);
var favoriteUserFilteredEntityIds = await GetFavoriteEntityIdsByUserId(favoriteUserId, cancellationToken);
var queryable = (await GetDbSetAsync())
.WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id))
.WhereIf(tagFilteredEntityIds != null, x => tagFilteredEntityIds.Contains(x.Id.ToString()))
.WhereIf(favoriteUserFilteredEntityIds != null, x => favoriteUserFilteredEntityIds.Contains(x.Id.ToString()))
.WhereIf(tagFilteredEntityIds.Count > 0, x => tagFilteredEntityIds.Contains(x.Id))
.WhereIf(favoriteUserFilteredEntityIds.Count > 0, x => favoriteUserFilteredEntityIds.Contains(x.Id))
.WhereIf(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId)
.WhereIf(statusFilter.HasValue, x => x.Status == statusFilter)
.WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter));
var count = await queryable.CountAsync(GetCancellationToken(cancellationToken));
return count;
return await queryable.CountAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<BlogPost>> GetListAsync(
@ -99,27 +88,16 @@ public class EfCoreBlogPostRepository : EfCoreRepository<ICmsKitDbContext, BlogP
{
var dbContext = await GetDbContextAsync();
var blogPostsDbSet = dbContext.Set<BlogPost>();
var usersDbSet = dbContext.Set<CmsUser>();
List<Guid> entityIdFilters = null;
if (tagId.HasValue)
{
entityIdFilters = (await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken)).Select(Guid.Parse).ToList();
}
var tagFilteredEntityIds = tagId.HasValue
? await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken)
: null;
var favoriteUserFilteredEntityIds = favoriteUserId.HasValue
? await _markedItemManager.GetEntityIdsFilteredByUserAsync(favoriteUserId.Value, BlogPostConsts.EntityType)
: null;
cancellationToken = GetCancellationToken(cancellationToken);
var tagFilteredEntityIds = await GetEntityIdsByTagId(tagId, cancellationToken);
var favoriteUserFilteredEntityIds = await GetFavoriteEntityIdsByUserId(favoriteUserId, cancellationToken);
var queryable = (await GetDbSetAsync())
.WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id))
.WhereIf(tagFilteredEntityIds != null, x => tagFilteredEntityIds.Contains(x.Id.ToString()))
.WhereIf(favoriteUserFilteredEntityIds != null, x => favoriteUserFilteredEntityIds.Contains(x.Id.ToString()))
.WhereIf(tagFilteredEntityIds.Count > 0, x => tagFilteredEntityIds.Contains(x.Id))
.WhereIf(favoriteUserFilteredEntityIds.Count > 0, x => favoriteUserFilteredEntityIds.Contains(x.Id))
.WhereIf(blogId.HasValue, x => x.BlogId == blogId)
.WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter))
.WhereIf(authorId.HasValue, x => x.AuthorId == authorId)
@ -204,4 +182,64 @@ public class EfCoreBlogPostRepository : EfCoreRepository<ICmsKitDbContext, BlogP
{
await DeleteAsync(x => x.BlogId == blogId, cancellationToken: cancellationToken);
}
private async Task<List<Guid>> GetFavoriteEntityIdsByUserId(Guid? userId, CancellationToken cancellationToken = default)
{
var entityIdFilters = new List<Guid>();
if (!userId.HasValue)
{
return entityIdFilters;
}
var entityIds = await _markedItemManager.GetEntityIdsFilteredByUserAsync(
userId.Value,
BlogPostConsts.EntityType,
CurrentTenant.Id,
cancellationToken
);
if (entityIds.Count == 0)
{
entityIdFilters.Add(Guid.Empty);
return entityIdFilters;
}
foreach (var entityId in entityIds)
{
if (Guid.TryParse(entityId, out var parsedEntityId))
{
entityIdFilters.Add(parsedEntityId);
}
}
return entityIdFilters;
}
private async Task<List<Guid>> GetEntityIdsByTagId(Guid? tagId, CancellationToken cancellationToken = default)
{
var entityIdFilters = new List<Guid>();
if (!tagId.HasValue)
{
return entityIdFilters;
}
var entityIds =
await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken);
if (entityIds.Count == 0)
{
entityIdFilters.Add(Guid.Empty);
return entityIdFilters;
}
foreach (var entityId in entityIds)
{
if (Guid.TryParse(entityId, out var parsedEntityId))
{
entityIdFilters.Add(parsedEntityId);
}
}
return entityIdFilters;
}
}

23
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs

@ -86,8 +86,9 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
CancellationToken cancellationToken = default)
{
cancellationToken = GetCancellationToken(cancellationToken);
var dbContext = await GetDbContextAsync(cancellationToken);
var blogPostQueryable = await GetQueryableAsync();
var blogPostQueryable = await GetQueryableAsync(cancellationToken);
var tagFilteredEntityIds = await GetEntityIdsByTagId(tagId, cancellationToken);
@ -134,6 +135,12 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
var entityIds =
await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken);
if (entityIds.Count == 0)
{
entityIdFilters.Add(Guid.Empty);
return entityIdFilters;
}
foreach (var entityId in entityIds)
{
if (Guid.TryParse(entityId, out var parsedEntityId))
@ -153,9 +160,19 @@ public class MongoBlogPostRepository : MongoDbRepository<CmsKitMongoDbContext, B
return entityIdFilters;
}
var entityIds =
await _markedItemManager.GetEntityIdsFilteredByUserAsync(userId.Value, BlogPostConsts.EntityType, CurrentTenant.Id, cancellationToken);
var entityIds = await _markedItemManager.GetEntityIdsFilteredByUserAsync(
userId.Value,
BlogPostConsts.EntityType,
CurrentTenant.Id,
cancellationToken
);
if (entityIds.Count == 0)
{
entityIdFilters.Add(Guid.Empty);
return entityIdFilters;
}
foreach (var entityId in entityIds)
{
if (Guid.TryParse(entityId, out var parsedEntityId))

9
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs

@ -62,8 +62,13 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub
input.SkipCount, input.Sorting);
return new PagedResultDto<BlogPostCommonDto>(
await BlogPostRepository.GetCountAsync(blogId: blog.Id, tagId: input.TagId,
statusFilter: BlogPostStatus.Published, authorId: input.AuthorId),
await BlogPostRepository.GetCountAsync(
blogId: blog.Id,
tagId: input.TagId,
favoriteUserId: favoriteUserId,
statusFilter: BlogPostStatus.Published,
authorId: input.AuthorId
),
ObjectMapper.Map<List<BlogPost>, List<BlogPostCommonDto>>(blogPosts));
}

27
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml

@ -14,7 +14,8 @@
@{
const string dummyImageSource = "/cms-kit/dummy-placeholder-320x180.png";
var isMarkedItemFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<MarkedItemsFeature>() && Model.MarkedItemsFeature?.IsEnabled == true;
var isMarkedItemFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled<MarkedItemsFeature>() &&
(Model.MarkedItemsFeature?.IsEnabled == true || Model.FilterOnFavorites.HasValue);
}
@section styles {
@ -68,20 +69,20 @@
<hr />
}
@if (Model.Blogs.TotalCount > 0)
@if (isMarkedItemFeatureEnabled)
{
@if (isMarkedItemFeatureEnabled)
{
var filterOnFavorties = Model.FilterOnFavorites.GetValueOrDefault();
string icon = filterOnFavorties ? "heart" : "heart-o";
<abp-button class="favorite-button badge text-bg-light my-2 border-light-subtle"
button-type="Light"
icon="@icon text-danger"
text="@L["FilterOnFavorites"]"
filter-on-favorites="@filterOnFavorties">
</abp-button>
var filterOnFavorites = Model.FilterOnFavorites.GetValueOrDefault();
string icon = filterOnFavorites ? "heart" : "heart-o";
<abp-button class="favorite-button badge text-bg-light my-2 border-light-subtle"
button-type="Light"
icon="@icon text-danger"
text="@L["FilterOnFavorites"]"
filter-on-favorites="@filterOnFavorites">
</abp-button>
}
}
@if (Model.Blogs.TotalCount > 0)
{
<abp-row id="blogs-container">
@foreach (var blog in Model.Blogs.Items)
{

Loading…
Cancel
Save