Browse Source

refactored blog admin app service and added blog manager

pull/7851/head
Ahmet 6 years ago
parent
commit
73fc328fd6
  1. 69
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs
  2. 5
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs
  3. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  4. 46
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogManager.cs
  5. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostSlugAlreadyExistException.cs
  6. 22
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogSlugAlreadyExistException.cs
  7. 19
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs

69
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs

@ -1,10 +1,8 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs;
using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalFeatures;
@ -14,24 +12,63 @@ namespace Volo.CmsKit.Admin.Blogs
{ {
[RequiresGlobalFeature(typeof(BlogsFeature))] [RequiresGlobalFeature(typeof(BlogsFeature))]
[Authorize(CmsKitAdminPermissions.Blogs.Default)] [Authorize(CmsKitAdminPermissions.Blogs.Default)]
public class BlogAdminAppService : CrudAppService<Blog, BlogDto, Guid, BlogGetListInput>, IBlogAdminAppService public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppService
{ {
public BlogAdminAppService(IRepository<Blog, Guid> repository) : base(repository) protected IBlogRepository BlogRepository { get; }
protected BlogManager BlogManager { get; }
public BlogAdminAppService(IBlogRepository blogRepository, BlogManager blogManager)
{ {
GetListPolicyName = CmsKitAdminPermissions.Blogs.Default; BlogRepository = blogRepository;
GetPolicyName = CmsKitAdminPermissions.Blogs.Default; BlogManager = blogManager;
CreatePolicyName = CmsKitAdminPermissions.Blogs.Create; }
UpdatePolicyName = CmsKitAdminPermissions.Blogs.Update;
DeletePolicyName = CmsKitAdminPermissions.Blogs.Delete; public virtual async Task<BlogDto> GetAsync(Guid id)
{
var blog = await BlogRepository.GetAsync(id);
return ObjectMapper.Map<Blog, BlogDto>(blog);
}
public virtual async Task<PagedResultDto<BlogDto>> GetListAsync(BlogGetListInput input)
{
var totalCount = await BlogRepository.GetCountAsync(input.Filter);
var blogs = await BlogRepository.GetListAsync(
input.Filter,
input.Sorting,
input.MaxResultCount,
input.SkipCount);
return new PagedResultDto<BlogDto>(totalCount, ObjectMapper.Map<List<Blog>, List<BlogDto>>(blogs));
}
[Authorize(CmsKitAdminPermissions.Blogs.Create)]
public virtual async Task<BlogDto> CreateAsync(BlogDto input)
{
var blog = await BlogManager.CreateAsync(input.Name, input.Slug);
await BlogRepository.InsertAsync(blog);
return ObjectMapper.Map<Blog, BlogDto>(blog);
}
[Authorize(CmsKitAdminPermissions.Blogs.Update)]
public virtual async Task<BlogDto> UpdateAsync(Guid id, BlogDto input)
{
var blog = await BlogRepository.GetAsync(id);
blog = await BlogManager.UpdateAsync(blog, input.Name, input.Slug);
await BlogRepository.UpdateAsync(blog);
return ObjectMapper.Map<Blog, BlogDto>(blog);
} }
protected override async Task<IQueryable<Blog>> CreateFilteredQueryAsync(BlogGetListInput input) [Authorize(CmsKitAdminPermissions.Blogs.Delete)]
public virtual Task DeleteAsync(Guid id)
{ {
var queryable = await base.CreateFilteredQueryAsync(input); return BlogRepository.DeleteAsync(id);
return queryable
.WhereIf(
!input.Filter.IsNullOrWhiteSpace(),
x => x.Name.ToLower().Contains(input.Filter));
} }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs

@ -16,6 +16,11 @@
} }
public static class Blogs public static class Blogs
{
public const string SlugAlreadyExist = "CmsKit:Blog:0001";
}
public static class BlogPosts
{ {
public const string SlugAlreadyExist = "CmsKit:BlogPost:0001"; public const string SlugAlreadyExist = "CmsKit:BlogPost:0001";
} }

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -3,6 +3,7 @@
"texts": { "texts": {
"CmsKit:0002": "Content already exists!", "CmsKit:0002": "Content already exists!",
"CmsKit:0003": "The entity {0} is not taggable.", "CmsKit:0003": "The entity {0} is not taggable.",
"CmsKit:Blog:0001": "The given slug ({Slug}) already exists!",
"CmsKit:BlogPost:0001": "The given slug already exists!", "CmsKit:BlogPost:0001": "The given slug already exists!",
"CmsKit:Media:0001": "'{Name}' is not a valid media name.", "CmsKit:Media:0001": "'{Name}' is not a valid media name.",
"CmsKit:Page:0001": "The given url ({0}) already exists.", "CmsKit:Page:0001": "The given url ({0}) already exists.",

46
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogManager.cs

@ -0,0 +1,46 @@
using System;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Domain.Services;
using Volo.Abp.MultiTenancy;
namespace Volo.CmsKit.Blogs
{
public class BlogManager : DomainService
{
protected IBlogRepository BlogRepository { get; }
public BlogManager(IBlogRepository blogRepository)
{
BlogRepository = blogRepository;
}
public virtual async Task<Blog> CreateAsync([NotNull] string name, [NotNull] string slug)
{
await CheckSlugAsync(slug);
return new Blog(GuidGenerator.Create(), name, slug, CurrentTenant.GetId());
}
public virtual async Task<Blog> UpdateAsync([NotNull] Blog blog, [NotNull] string name, [NotNull] string slug)
{
if (slug != blog.Slug)
{
await CheckSlugAsync(slug);
}
blog.SetName(name);
blog.SetSlug(slug);
return blog;
}
protected virtual async Task CheckSlugAsync([NotNull] string slug)
{
if (await BlogRepository.SlugExistsAsync(slug))
{
throw new BlogSlugAlreadyExistException(slug);
}
}
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostSlugAlreadyExistException.cs

@ -19,7 +19,7 @@ namespace Volo.CmsKit.Blogs
Slug = slug; Slug = slug;
BlogId = blogId; BlogId = blogId;
Code = CmsKitErrorCodes.Blogs.SlugAlreadyExist; Code = CmsKitErrorCodes.BlogPosts.SlugAlreadyExist;
WithData(nameof(Slug), Slug); WithData(nameof(Slug), Slug);
WithData(nameof(BlogId), BlogId); WithData(nameof(BlogId), BlogId);

22
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogSlugAlreadyExistException.cs

@ -0,0 +1,22 @@
using System;
using System.Runtime.Serialization;
using Volo.Abp;
namespace Volo.CmsKit.Blogs
{
[Serializable]
public class BlogSlugAlreadyExistException : BusinessException
{
public BlogSlugAlreadyExistException(string slug)
{
Code = CmsKitErrorCodes.Blogs.SlugAlreadyExist;
WithData(nameof(Blog.Slug), slug);
}
public BlogSlugAlreadyExistException(
SerializationInfo serializationInfo, StreamingContext context) : base(serializationInfo, context)
{
}
}
}

19
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
@ -7,7 +8,23 @@ namespace Volo.CmsKit.Blogs
{ {
public interface IBlogRepository : IBasicRepository<Blog, Guid> public interface IBlogRepository : IBasicRepository<Blog, Guid>
{ {
public Task<Blog> GetBySlugAsync(string slug, CancellationToken cancellationToken = default); Task<List<Blog>> GetListAsync(
string filter = null,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
CancellationToken cancellationToken = default
);
Task<long> GetCountAsync(
string filter = null,
CancellationToken cancellationToken = default
);
Task<Blog> GetBySlugAsync(string slug, CancellationToken cancellationToken = default);
Task<bool> ExistsAsync(Guid blogId, CancellationToken cancellationToken = default); Task<bool> ExistsAsync(Guid blogId, CancellationToken cancellationToken = default);
Task<bool> SlugExistsAsync(string slug, CancellationToken cancellationToken = default);
} }
} }

Loading…
Cancel
Save