From 493bf50037590cfe10fe989411f5b5cf12dac8af Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 5 Jun 2020 14:12:40 +0300 Subject: [PATCH] blog admin separation: application & httpApi --- modules/blogging/Volo.Blogging.sln | 14 ++++ .../Volo.Blogging.Admin.Application.csproj | 20 ++++++ .../Admin/BloggingAdminAppServiceBase.cs | 14 ++++ ...oggingAdminApplicationAutoMapperProfile.cs | 14 ++++ .../Admin/BloggingAdminApplicationModule.cs | 27 ++++++++ .../Admin/Blogs/BlogManagementAppService.cs | 64 +++++++++++++++++++ .../Volo.Blogging.Admin.HttpApi.csproj | 18 ++++++ .../Admin/BlogManagementController.cs | 56 ++++++++++++++++ .../Admin/BloggingAdminHttpApiModule.cs | 33 ++++++++++ .../Volo/Blogging/Blogs/BlogAppService.cs | 29 --------- .../Volo/Blogging/BlogsController.cs | 20 ------ 11 files changed, 260 insertions(+), 49 deletions(-) create mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj create mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminAppServiceBase.cs create mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs create mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationModule.cs create mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs create mode 100644 modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj create mode 100644 modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs create mode 100644 modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BloggingAdminHttpApiModule.cs diff --git a/modules/blogging/Volo.Blogging.sln b/modules/blogging/Volo.Blogging.sln index 0ccc23d243..7a3ceccf61 100644 --- a/modules/blogging/Volo.Blogging.sln +++ b/modules/blogging/Volo.Blogging.sln @@ -51,6 +51,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "public-app", "public-app", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Blogging.Admin.Application.Contracts", "src\Volo.Blogging.Admin.Application.Contracts\Volo.Blogging.Admin.Application.Contracts.csproj", "{D8DF4D56-644E-4ADF-9DB9-712DDA62B129}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Blogging.Admin.Application", "src\Volo.Blogging.Admin.Application\Volo.Blogging.Admin.Application.csproj", "{CB5DEBB3-5C2E-48E9-AA42-497575BCC7A4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Blogging.Admin.HttpApi", "src\Volo.Blogging.Admin.HttpApi\Volo.Blogging.Admin.HttpApi.csproj", "{59BBAF94-CC8E-4313-9143-F2F5C36A7C45}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -129,6 +133,14 @@ Global {D8DF4D56-644E-4ADF-9DB9-712DDA62B129}.Debug|Any CPU.Build.0 = Debug|Any CPU {D8DF4D56-644E-4ADF-9DB9-712DDA62B129}.Release|Any CPU.ActiveCfg = Release|Any CPU {D8DF4D56-644E-4ADF-9DB9-712DDA62B129}.Release|Any CPU.Build.0 = Release|Any CPU + {CB5DEBB3-5C2E-48E9-AA42-497575BCC7A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB5DEBB3-5C2E-48E9-AA42-497575BCC7A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB5DEBB3-5C2E-48E9-AA42-497575BCC7A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB5DEBB3-5C2E-48E9-AA42-497575BCC7A4}.Release|Any CPU.Build.0 = Release|Any CPU + {59BBAF94-CC8E-4313-9143-F2F5C36A7C45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BBAF94-CC8E-4313-9143-F2F5C36A7C45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59BBAF94-CC8E-4313-9143-F2F5C36A7C45}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BBAF94-CC8E-4313-9143-F2F5C36A7C45}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -155,6 +167,8 @@ Global {03328648-6DE6-43C1-9A27-64771A73FAAD} = {1314C122-18F0-4C6B-895F-27645B6121FF} {A4DBA051-7FB9-4AD7-B9B7-6810B2268122} = {1314C122-18F0-4C6B-895F-27645B6121FF} {D8DF4D56-644E-4ADF-9DB9-712DDA62B129} = {BE2A423C-271E-469A-AD90-5640DEBEE9C1} + {CB5DEBB3-5C2E-48E9-AA42-497575BCC7A4} = {BE2A423C-271E-469A-AD90-5640DEBEE9C1} + {59BBAF94-CC8E-4313-9143-F2F5C36A7C45} = {BE2A423C-271E-469A-AD90-5640DEBEE9C1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F2BAE819-78D4-407A-9201-22473B2850B0} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj new file mode 100644 index 0000000000..cf5354adb9 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj @@ -0,0 +1,20 @@ + + + + + + + netstandard2.0 + Volo.Blogging.Admin.Application + Volo.Blogging.Admin.Application + + + + + + + + + + + diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminAppServiceBase.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminAppServiceBase.cs new file mode 100644 index 0000000000..4e8ff9d315 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminAppServiceBase.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Application.Services; +using Volo.Blogging.Localization; + +namespace Volo.Blogging.Admin +{ + public abstract class BloggingAdminAppServiceBase : ApplicationService + { + protected BloggingAdminAppServiceBase() + { + ObjectMapperContext = typeof(BloggingAdminApplicationModule); + LocalizationResource = typeof(BloggingResource); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs new file mode 100644 index 0000000000..2f2cf74563 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationAutoMapperProfile.cs @@ -0,0 +1,14 @@ +using AutoMapper; +using Volo.Blogging.Admin.Blogs; +using Volo.Blogging.Blogs; + +namespace Volo.Blogging.Admin +{ + public class BloggingAdminApplicationAutoMapperProfile : Profile + { + public BloggingAdminApplicationAutoMapperProfile() + { + CreateMap(); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationModule.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationModule.cs new file mode 100644 index 0000000000..2de8b3af07 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/BloggingAdminApplicationModule.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AutoMapper; +using Volo.Abp.Caching; +using Volo.Abp.Modularity; +using Volo.Blogging.Comments; +using Volo.Blogging.Posts; + +namespace Volo.Blogging.Admin +{ + [DependsOn( + typeof(BloggingDomainModule), + typeof(BloggingAdminApplicationContractsModule), + typeof(AbpCachingModule), + typeof(AbpAutoMapperModule))] + public class BloggingAdminApplicationModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAutoMapperObjectMapper(); + Configure(options => + { + options.AddProfile(validate: true); + }); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs new file mode 100644 index 0000000000..1f43085461 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs @@ -0,0 +1,64 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Blogging.Blogs; + +namespace Volo.Blogging.Admin.Blogs +{ + public class BlogManagementAppService : BloggingAdminAppServiceBase, IBlogManagementAppService + { + private readonly IBlogRepository _blogRepository; + + public BlogManagementAppService(IBlogRepository blogRepository) + { + _blogRepository = blogRepository; + } + + public async Task> GetListAsync() + { + var blogs = await _blogRepository.GetListAsync(); + + return new ListResultDto( + ObjectMapper.Map, List>(blogs) + ); + } + + public async Task GetAsync(Guid id) + { + var blog = await _blogRepository.GetAsync(id); + + return ObjectMapper.Map(blog); + } + + [Authorize(BloggingAdminPermissions.Blogs.Create)] + public async Task Create(CreateBlogDto input) + { + var newBlog = await _blogRepository.InsertAsync(new Blog(GuidGenerator.Create(), input.Name, input.ShortName) + { + Description = input.Description + }); + + return ObjectMapper.Map(newBlog); + } + + [Authorize(BloggingAdminPermissions.Blogs.Update)] + public async Task Update(Guid id, UpdateBlogDto input) + { + var blog = await _blogRepository.GetAsync(id); + + blog.SetName(input.Name); + blog.SetShortName(input.ShortName); + blog.Description = input.Description; + + return ObjectMapper.Map(blog); + } + + [Authorize(BloggingAdminPermissions.Blogs.Delete)] + public async Task Delete(Guid id) + { + await _blogRepository.DeleteAsync(id); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj new file mode 100644 index 0000000000..e9435610df --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj @@ -0,0 +1,18 @@ + + + + + + + netcoreapp3.1 + Volo.Blogging.Admin.HttpApi + Volo.Blogging.Admin.HttpApi + + + + + + + + + diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs new file mode 100644 index 0000000000..c59bad9baf --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs @@ -0,0 +1,56 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Blogging.Admin.Blogs; + +namespace Volo.Blogging.Admin +{ + [RemoteService(Name = BloggingAdminRemoteServiceConsts.RemoteServiceName)] + [Area("bloggingAdmin")] + [Route("api/blogging/blogs/admin")] + public class BlogManagementController : AbpController, IBlogManagementAppService + { + private readonly IBlogManagementAppService _blogManagementAppService; + + public BlogManagementController(IBlogManagementAppService blogManagementAppService) + { + _blogManagementAppService = blogManagementAppService; + } + + [HttpGet] + public async Task> GetListAsync() + { + return await _blogManagementAppService.GetListAsync(); + } + + [HttpGet] + [Route("{id}")] + public async Task GetAsync(Guid id) + { + return await _blogManagementAppService.GetAsync(id); + } + + [HttpPost] + public async Task Create(CreateBlogDto input) + { + return await _blogManagementAppService.Create(input); + } + + [HttpPut] + [Route("{id}")] + public async Task Update(Guid id, UpdateBlogDto input) + { + return await _blogManagementAppService.Update(id, input); + } + + [HttpDelete] + [Route("{id}")] + public async Task Delete(Guid id) + { + await _blogManagementAppService.Delete(id); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BloggingAdminHttpApiModule.cs b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BloggingAdminHttpApiModule.cs new file mode 100644 index 0000000000..bd88cc14d5 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BloggingAdminHttpApiModule.cs @@ -0,0 +1,33 @@ +using Localization.Resources.AbpUi; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Blogging.Localization; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Blogging.Admin +{ + [DependsOn( + typeof(BloggingAdminApplicationContractsModule), + typeof(AbpAspNetCoreMvcModule))] + public class BloggingAdminHttpApiModule : AbpModule + { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(BloggingAdminHttpApiModule).Assembly); + }); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes(typeof(AbpUiResource)); + }); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs index 88b9a75410..1b0a903d2e 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Blogs/BlogAppService.cs @@ -44,34 +44,5 @@ namespace Volo.Blogging.Blogs return ObjectMapper.Map(blog); } - - [Authorize(BloggingPermissions.Blogs.Create)] - public async Task Create(CreateBlogDto input) - { - var newBlog = await _blogRepository.InsertAsync(new Blog(GuidGenerator.Create(), input.Name, input.ShortName) - { - Description = input.Description - }); - - return ObjectMapper.Map(newBlog); - } - - [Authorize(BloggingPermissions.Blogs.Update)] - public async Task Update(Guid id, UpdateBlogDto input) - { - var blog = await _blogRepository.GetAsync(id); - - blog.SetName(input.Name); - blog.SetShortName(input.ShortName); - blog.Description = input.Description; - - return ObjectMapper.Map(blog); - } - - [Authorize(BloggingPermissions.Blogs.Delete)] - public async Task Delete(Guid id) - { - await _blogRepository.DeleteAsync(id); - } } } diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs index cb67ac3fb7..9ef141b3de 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs @@ -40,25 +40,5 @@ namespace Volo.Blogging { return await _blogAppService.GetAsync(id); } - - [HttpPost] - public async Task Create(CreateBlogDto input) - { - return await _blogAppService.Create(input); - } - - [HttpPut] - [Route("{id}")] - public async Task Update(Guid id, UpdateBlogDto input) - { - return await _blogAppService.Update(id, input); - } - - [HttpDelete] - [Route("{id}")] - public async Task Delete(Guid id) - { - await _blogAppService.Delete(id); - } } }