diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs new file mode 100644 index 0000000000..823efdfc4e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs @@ -0,0 +1,20 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class BlogPostDto : EntityDto + { + public Guid BlogId { get; protected set; } + + public string Title { get; protected set; } + + public string UrlSlug { get; protected set; } + + public string CoverImageUrl { get; set; } + + public bool IsPublished { get; protected set; } + + public DateTime? PublishDate { get; protected set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs new file mode 100644 index 0000000000..761eb15c55 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs @@ -0,0 +1,17 @@ +using System; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class CreateUpdateBlogPostDto + { + public Guid BlogId { get; protected set; } + + public string Title { get; protected set; } + + public string UrlSlug { get; protected set; } + + public string CoverImageUrl { get; set; } + + public bool IsPublished { get; protected set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs new file mode 100644 index 0000000000..195778d92b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -0,0 +1,17 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Admin.Blogs +{ + public interface IBlogPostAdminAppService + : ICrudAppService< + BlogPostDto, + Guid, + PagedAndSortedResultRequestDto, + CreateUpdateBlogPostDto> + { + Task GetByUrlSlugAsync(string urlSlug); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs index ffe716b13c..2a70feefc5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -37,5 +37,12 @@ namespace Volo.CmsKit.Permissions public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; } + public static class BlogPosts + { + public const string Default = GroupName + ".BlogPosts"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index b66cf8b940..ba30b20814 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.AspNetCore.Authorization; +using System; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; @@ -6,6 +7,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { + [Authorize(CmsKitAdminPermissions.Blogs.Default)] public class BlogAdminAppService : CrudAppService, IBlogAdminAppService { public BlogAdminAppService(IRepository repository) : base(repository) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs new file mode 100644 index 0000000000..87c3f24fc1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -0,0 +1,80 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Blogs +{ + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] + public class BlogPostAdminAppService + : CrudAppService< + BlogPost, + BlogPostDto, + Guid, + PagedAndSortedResultRequestDto, + CreateUpdateBlogPostDto> + , IBlogPostAdminAppService + { + protected readonly IBlogPostManager _blogPostManager; + protected readonly IBlogPostRepository _blogPostRepository; + + protected BlogPostAdminAppService( + IRepository repository, + IBlogPostManager blogPostManager, + IBlogPostRepository blogPostRepository) : base(repository) + { + _blogPostManager = blogPostManager; + _blogPostRepository = blogPostRepository; + + + GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default; + GetPolicyName = CmsKitAdminPermissions.BlogPosts.Default; + CreatePolicyName = CmsKitAdminPermissions.BlogPosts.Create; + UpdatePolicyName = CmsKitAdminPermissions.BlogPosts.Update; + DeletePolicyName = CmsKitAdminPermissions.BlogPosts.Delete; + } + + public async Task GetByUrlSlugAsync(string urlSlug) + { + var blogPost = await _blogPostRepository.GetByUrlSlugAsync(urlSlug); + + return MapToGetOutputDto(blogPost); + } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public override async Task CreateAsync(CreateUpdateBlogPostDto input) + { + var entity = await _blogPostManager + .CreateAsync( + new BlogPost( + input.BlogId, + input.Title, + input.UrlSlug, + input.CoverImageUrl, + input.IsPublished)); + + return MapToGetOutputDto(entity); + } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public override async Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) + { + var entity = await _blogPostRepository.GetAsync(id); + + entity.SetTitle(input.Title); + entity.SetUrlSlug(input.UrlSlug); + entity.SetIsPublished(input.IsPublished); + + MapToEntity(input, entity); + + return MapToGetOutputDto(entity); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index dfd0ec7977..d354623891 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -10,5 +10,7 @@ namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs public interface IBlogPostRepository : IBasicRepository { Task SlugExistsAsync(string slug); + + Task GetByUrlSlugAsync(string urlSlug); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs index 79a2bbe50f..b6442dcf01 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs @@ -14,6 +14,11 @@ namespace Volo.CmsKit.Blogs { } + public Task GetByUrlSlugAsync(string urlSlug) + { + return GetAsync(x => x.UrlSlug.ToLower() == urlSlug); + } + public async Task SlugExistsAsync(string slug) { var dbSet = await GetDbSetAsync(); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs index 55eb84e1bb..a761c69895 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs @@ -12,6 +12,11 @@ namespace Volo.CmsKit.MongoDB.Blogs { } + public Task GetByUrlSlugAsync(string urlSlug) + { + return GetAsync(x => x.UrlSlug.ToLower() == urlSlug); + } + public async Task SlugExistsAsync(string slug) { var queryable = await GetQueryableAsync();