Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cms Kit - BlogPosts & BlogFeatures Refactoring #7845

Merged
merged 24 commits into from
Feb 26, 2021
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
2b2d298
CmsKit - Remove GetBySlug from Admin AppService
enisn Feb 24, 2021
e159458
CmsKit - Change BlogPostManager Creating method
enisn Feb 24, 2021
ef4cd89
Merge remote-tracking branch 'origin/dev' into cms-kit/blogs-refactor…
enisn Feb 24, 2021
2cf9949
CmsKit - Remove CrudAppService from BlogPostAdminAppService
enisn Feb 24, 2021
589b464
CmsKit - Use LocalEvent to Notify BlogFeature changes
enisn Feb 24, 2021
f82f8f1
CmsKit - Remove FeatureNames from BlogPostConsts
enisn Feb 24, 2021
349ce8b
CmsKit - Remove interfaces of BlogPostManager & BlogFeatureManager
enisn Feb 24, 2021
8f350de
CmsKit - Add missing virtual keywords at BlogFeatureAdminAppService
enisn Feb 24, 2021
71996b6
CmsKit - Refactoring on BlogFeature Caching
enisn Feb 24, 2021
1f2c9f5
CmsKit - Move BlogFeature caching types
enisn Feb 24, 2021
923511e
CmsKit - Include Author in BlogPost for EfCore
enisn Feb 24, 2021
9a1b163
CmsKit - Include Author in BlogPost for MongoDb
enisn Feb 24, 2021
9f5ec58
CmsKit - Add missin CancellationToken in EfCoreBlogPostRepository
enisn Feb 24, 2021
8cc45c3
CmsKit - Add [Serializable] attribute to BlogFeatureCacheItem
enisn Feb 24, 2021
88ef8af
CmsKit - Add missing Author in EfCoreBlogPostRepository
enisn Feb 24, 2021
4eafa9c
CmsKit - Tidy-up Namespaces in BlogPostRepository
enisn Feb 24, 2021
c124c64
CmsKit - BlogPostManager refactoring
enisn Feb 25, 2021
e888ae3
CmsKit - Fix for BlogPostManager
enisn Feb 25, 2021
8d1ece4
CmsKit - Code formatting on BlogPostManager
enisn Feb 25, 2021
31ad6f1
CmsKit - Remove custom event & use pre-built event for BlogFeature
enisn Feb 25, 2021
bcbb75d
CmsKit - Remove events from BlogFeatureManager
enisn Feb 25, 2021
c96e1a4
CmsKit - Remove unnecessary Repository from BlogPostAdminAppService
enisn Feb 25, 2021
fb8fcef
CmsKit - Fix merge conflict from dev to blogs-refactorings
enisn Feb 26, 2021
66acaa1
CmsKit - Fix EfCore seeding issue on tests
enisn Feb 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ public interface IBlogPostAdminAppService
CreateBlogPostDto,
UpdateBlogPostDto>
{
Task<BlogPostDto> GetBySlugAsync(string blogSlug, string slug);

Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent);

Task<RemoteStreamContent> GetCoverImageAsync(Guid id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public class BlogFeatureAdminAppService : CmsKitAdminAppServiceBase, IBlogFeatur
{
protected IBlogFeatureRepository BlogFeatureRepository { get; }

protected IBlogFeatureManager BlogFeatureManager { get; }
protected BlogFeatureManager BlogFeatureManager { get; }

protected IDistributedEventBus EventBus { get; }

public BlogFeatureAdminAppService(
IBlogFeatureRepository blogFeatureRepository,
IBlogFeatureManager blogFeatureManager,
BlogFeatureManager blogFeatureManager,
IDistributedEventBus eventBus)
{
BlogFeatureRepository = blogFeatureRepository;
Expand All @@ -33,15 +33,15 @@ public class BlogFeatureAdminAppService : CmsKitAdminAppServiceBase, IBlogFeatur
}

[Authorize(CmsKitAdminPermissions.Blogs.Features)]
public async Task<List<BlogFeatureDto>> GetListAsync(Guid blogId)
public virtual async Task<List<BlogFeatureDto>> GetListAsync(Guid blogId)
{
var blogFeatures = await BlogFeatureManager.GetListAsync(blogId);

return ObjectMapper.Map<List<BlogFeature>, List<BlogFeatureDto>>(blogFeatures);
}

[Authorize(CmsKitAdminPermissions.Blogs.Features)]
public Task SetAsync(Guid blogId, BlogFeatureInputDto dto)
public virtual Task SetAsync(Guid blogId, BlogFeatureInputDto dto)
{
return BlogFeatureManager.SetAsync(blogId, dto.FeatureName, dto.IsEnabled);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
Expand All @@ -17,103 +18,115 @@ namespace Volo.CmsKit.Admin.Blogs
{
[RequiresGlobalFeature(typeof(BlogsFeature))]
[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
public class BlogPostAdminAppService
: CrudAppService<
BlogPost,
BlogPostDto,
Guid,
PagedAndSortedResultRequestDto,
CreateBlogPostDto,
UpdateBlogPostDto>
, IBlogPostAdminAppService
public class BlogPostAdminAppService: CmsKitAppServiceBase, IBlogPostAdminAppService
{
protected IBlogPostManager BlogPostManager { get; }
protected BlogPostManager BlogPostManager { get; }
protected IBlogPostRepository BlogPostRepository { get; }
protected IBlogRepository BlogRepository { get; }
protected IBlobContainer<BlogPostCoverImageContainer> BlobContainer { get; }
protected ICmsUserLookupService UserLookupService { get; }

public BlogPostAdminAppService(
IRepository<BlogPost, Guid> repository,
IBlogPostManager blogPostManager,
BlogPostManager blogPostManager,
IBlogPostRepository blogPostRepository,
IBlogRepository blogRepository,
IBlobContainer<BlogPostCoverImageContainer> blobContainer,
ICmsUserLookupService userLookupService) : base(repository)
ICmsUserLookupService userLookupService)
{
BlogPostManager = blogPostManager;
BlogPostRepository = blogPostRepository;
BlogRepository = blogRepository;
BlobContainer = blobContainer;
UserLookupService = userLookupService;

GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default;
GetPolicyName = CmsKitAdminPermissions.BlogPosts.Default;
CreatePolicyName = CmsKitAdminPermissions.BlogPosts.Create;
UpdatePolicyName = CmsKitAdminPermissions.BlogPosts.Update;
DeletePolicyName = CmsKitAdminPermissions.BlogPosts.Delete;
}

public virtual async Task<BlogPostDto> GetBySlugAsync(string blogSlug, string blogPostSlug)
[Authorize(CmsKitAdminPermissions.BlogPosts.Create)]
public virtual async Task<BlogPostDto> CreateAsync(CreateBlogPostDto input)
{
var blog = await BlogRepository.GetBySlugAsync(blogSlug);
var author = await UserLookupService.GetByIdAsync(CurrentUser.GetId());

var blogPost = await BlogPostRepository.GetBySlugAsync(blog.Id, blogPostSlug);
var blog = await BlogRepository.GetAsync(input.BlogId);

return await MapToGetOutputDtoAsync(blogPost);
}
var blogPost = await BlogPostManager.CreateAsync(
author,
blog,
input.Title,
input.Slug,
input.ShortDescription,
CurrentTenant.Id);

[Authorize(CmsKitAdminPermissions.BlogPosts.Create)]
public override async Task<BlogPostDto> CreateAsync(CreateBlogPostDto input)
{
_ = await UserLookupService.GetByIdAsync(CurrentUser.GetId());

var entity = await BlogPostManager
.CreateAsync(
new BlogPost(
GuidGenerator.Create(),
input.BlogId,
input.Title,
input.Slug,
input.ShortDescription));

return await MapToGetOutputDtoAsync(entity);
await BlogPostRepository.InsertAsync(blogPost);

return ObjectMapper.Map<BlogPost, BlogPostDto>(blogPost);
}

[Authorize(CmsKitAdminPermissions.BlogPosts.Update)]
public override async Task<BlogPostDto> UpdateAsync(Guid id, UpdateBlogPostDto input)
public virtual async Task<BlogPostDto> UpdateAsync(Guid id, UpdateBlogPostDto input)
{
var blogPost = await BlogPostRepository.GetAsync(id);

blogPost.SetTitle(input.Title);
blogPost.SetShortDescription(input.ShortDescription);

if (blogPost.Slug != input.Slug)
{
await BlogPostManager.SetSlugUrlAsync(blogPost, input.Slug);
}

MapToEntity(input, blogPost);

await BlogPostManager.UpdateAsync(blogPost);
await BlogPostRepository.UpdateAsync(blogPost);

return await MapToGetOutputDtoAsync(blogPost);
return ObjectMapper.Map<BlogPost,BlogPostDto>(blogPost);
}

[Authorize(CmsKitAdminPermissions.BlogPosts.Update)]
public virtual async Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent)
{
await Repository.GetAsync(id);
await BlogPostRepository.GetAsync(id);

using (var stream = streamContent.GetStream())
{
await BlobContainer.SaveAsync(id.ToString(), stream, overrideExisting: true);
}
}

[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
public virtual async Task<RemoteStreamContent> GetCoverImageAsync(Guid id)
{
var stream = await BlobContainer.GetAsync(id.ToString());

return new RemoteStreamContent(stream);
}

[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
public virtual async Task<BlogPostDto> GetAsync(Guid id)
{
var blogPost = await BlogPostRepository.GetAsync(id);

return ObjectMapper.Map<BlogPost, BlogPostDto>(blogPost);
}

[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
public virtual async Task<PagedResultDto<BlogPostDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
if (input.Sorting.IsNullOrEmpty())
{
input.Sorting = nameof(BlogPost.CreationTime) + " desc";
}

var blogPosts = await BlogPostRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, input.Sorting, includeDetails: true);

var count = await BlogPostRepository.GetCountAsync();

return new PagedResultDto<BlogPostDto>(
count,
ObjectMapper.Map<List<BlogPost>, List<BlogPostDto>>(blogPosts));
}

[Authorize(CmsKitAdminPermissions.BlogPosts.Delete)]
public virtual async Task DeleteAsync(Guid id)
{
await BlogPostRepository.DeleteAsync(id);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ public CmsKitAdminApplicationAutoMapperProfile()
CreateMap<Blog, BlogDto>(MemberList.Destination)
.ReverseMap();

CreateMap<BlogFeature, BlogFeatureDto>();

CreateMap<TagEntityTypeDefiniton, TagDefinitionDto>(MemberList.Destination);

CreateMap<MediaDescriptor, MediaDescriptorDto>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,6 @@ public virtual Task<BlogPostDto> GetAsync(Guid id)
return BlogPostAdminAppService.GetAsync(id);
}

[HttpGet]
[Route("{blogSlug}/{blogPostSlug}")]
[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
public virtual Task<BlogPostDto> GetBySlugAsync(string blogSlug, string blogPostSlug)
{
return BlogPostAdminAppService.GetBySlugAsync(blogSlug, blogPostSlug);
}

[HttpGet]
[Route("{id}/cover-image")]
[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace Volo.CmsKit.Blogs
{
[Serializable]
public class BlogFeatureCacheItem
{
public Guid Id { get; set; }
public string FeatureName { get; set; }
public bool IsEnabled { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using JetBrains.Annotations;
using System;
using Volo.Abp;

namespace Volo.CmsKit.Blogs
{
public class BlogFeatureCacheKey
{
public BlogFeatureCacheKey(Guid id, [NotNull] string featureName)
{
Id = id;
FeatureName = Check.NotNullOrEmpty(featureName, nameof(featureName));
}

public Guid Id { get; set; }

public string FeatureName { get; set; }

public override string ToString()
{
return $"BlogFeature_{Id}_{FeatureName}";
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,38 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.EventBus.Distributed;

namespace Volo.CmsKit.Blogs
{
public class BlogFeatureAppService : CmsKitAppServiceBase, IBlogFeatureAppService
{
protected virtual IBlogFeatureRepository BlogFeatureRepository { get; }

protected virtual IBlogFeatureCacheManager BlogFeatureCacheManager { get; }
protected virtual IDistributedCache<BlogFeatureCacheItem, BlogFeatureCacheKey> Cache { get; }

public BlogFeatureAppService(
IBlogFeatureRepository blogFeatureRepository,
IBlogFeatureCacheManager blogFeatureCacheManager)
IDistributedCache<BlogFeatureCacheItem, BlogFeatureCacheKey> blogFeatureCacheManager)
{
BlogFeatureRepository = blogFeatureRepository;
BlogFeatureCacheManager = blogFeatureCacheManager;
Cache = blogFeatureCacheManager;
}

public virtual Task<BlogFeatureDto> GetOrDefaultAsync(Guid blogId, string featureName)
public virtual async Task<BlogFeatureDto> GetOrDefaultAsync(Guid blogId, string featureName)
{
return BlogFeatureCacheManager
.AddOrGetAsync(
blogId,
featureName,
()=> GetOrDefaultFroRepositoryAsync(blogId, featureName)
);
var cacheItem = await Cache.GetOrAddAsync(
new BlogFeatureCacheKey(blogId, featureName),
()=> GetOrDefaultFroRepositoryAsync(blogId, featureName));

return ObjectMapper.Map<BlogFeatureCacheItem, BlogFeatureDto>(cacheItem);
}

protected virtual async Task<BlogFeatureDto> GetOrDefaultFroRepositoryAsync(Guid blogId, string featureName)
protected virtual async Task<BlogFeatureCacheItem> GetOrDefaultFroRepositoryAsync(Guid blogId, string featureName)
{
var feature = await BlogFeatureRepository.FindAsync(blogId, featureName);
var blogFeature = feature ?? new BlogFeature(blogId, featureName);

return ObjectMapper.Map<BlogFeature, BlogFeatureDto>(blogFeature);
return ObjectMapper.Map<BlogFeature, BlogFeatureCacheItem>(blogFeature);
}
}
}

This file was deleted.