diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index 8a1b85ae52..af2236c53c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -58,13 +58,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository Guid.TryParse(x, out _)).Select(Guid.Parse).ToList() - : []; - - var favoriteUserFilteredEntityIds = favoriteUserId.HasValue - ? (await _markedItemManager.GetEntityIdsFilteredByUserAsync(favoriteUserId.Value, BlogPostConsts.EntityType, CurrentTenant.Id, cancellationToken)).Where(x => Guid.TryParse(x, out _)).Select(Guid.Parse).ToList() - : []; + cancellationToken = GetCancellationToken(cancellationToken); + + var tagFilteredEntityIds = await GetEntityIdsByTagId(tagId, cancellationToken); + var favoriteUserFilteredEntityIds = await GetFavoriteEntityIdsByUserId(favoriteUserId, cancellationToken); var queryable = (await GetDbSetAsync()) .WhereIf(tagFilteredEntityIds.Count > 0, x => tagFilteredEntityIds.Contains(x.Id)) @@ -93,13 +90,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository(); - var tagFilteredEntityIds = tagId.HasValue - ? (await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken)).Where(x => Guid.TryParse(x, out _)).Select(Guid.Parse).ToList() - : []; - - var favoriteUserFilteredEntityIds = favoriteUserId.HasValue - ? (await _markedItemManager.GetEntityIdsFilteredByUserAsync(favoriteUserId.Value, BlogPostConsts.EntityType, CurrentTenant.Id, cancellationToken)).Where(x => Guid.TryParse(x, out _)).Select(Guid.Parse).ToList() - : []; + cancellationToken = GetCancellationToken(cancellationToken); + + var tagFilteredEntityIds = await GetEntityIdsByTagId(tagId, cancellationToken); + var favoriteUserFilteredEntityIds = await GetFavoriteEntityIdsByUserId(favoriteUserId, cancellationToken); var queryable = (await GetDbSetAsync()) .WhereIf(tagFilteredEntityIds.Count > 0, x => tagFilteredEntityIds.Contains(x.Id)) @@ -188,4 +182,64 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId, cancellationToken: cancellationToken); } + + private async Task> GetFavoriteEntityIdsByUserId(Guid? userId, CancellationToken cancellationToken = default) + { + var entityIdFilters = new List(); + 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> GetEntityIdsByTagId(Guid? tagId, CancellationToken cancellationToken = default) + { + var entityIdFilters = new List(); + 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; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 78afc5a871..f2103c1580 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -86,8 +86,9 @@ public class MongoBlogPostRepository : MongoDbRepository( - 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>(blogPosts)); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 23f214f1e5..b6d0b41f9d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/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() && Model.MarkedItemsFeature?.IsEnabled == true; + var isMarkedItemFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled() && + (Model.MarkedItemsFeature?.IsEnabled == true || Model.FilterOnFavorites.HasValue); } @section styles { @@ -68,20 +69,20 @@
} -@if (Model.Blogs.TotalCount > 0) +@if (isMarkedItemFeatureEnabled) { - @if (isMarkedItemFeatureEnabled) - { - var filterOnFavorties = Model.FilterOnFavorites.GetValueOrDefault(); - string icon = filterOnFavorties ? "heart" : "heart-o"; - - + var filterOnFavorites = Model.FilterOnFavorites.GetValueOrDefault(); + string icon = filterOnFavorites ? "heart" : "heart-o"; + + +} - } +@if (Model.Blogs.TotalCount > 0) +{ @foreach (var blog in Model.Blogs.Items) {