From a18c190cdc4d71ae0d3b27c159862c874c4a2bc0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 11 Apr 2020 17:36:41 +0800 Subject: [PATCH] Make docs module shortName unique --- .../Docs/Admin/Projects/ProjectAdminAppService.cs | 10 ++++++++-- .../Volo/Docs/DocsDomainSharedModule.cs | 6 ++++++ .../Volo/Docs/Localization/Domain/en.json | 3 ++- .../Volo/Docs/Localization/Domain/zh-Hans.json | 3 ++- .../Volo/Docs/Localization/Domain/zh-Hant.json | 4 +++- .../Volo/Docs/Projects/IProjectRepository.cs | 2 ++ .../ProjectShortNameAlreadyExistsException.cs | 13 +++++++++++++ .../Volo/Docs/Projects/EfCoreProjectRepository.cs | 10 +++++++--- .../Volo/Docs/Projects/MongoProjectRepository.cs | 10 ++++++++-- 9 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/ProjectShortNameAlreadyExistsException.cs diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs index d5aef3e614..436c9d1c76 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs @@ -47,6 +47,11 @@ namespace Volo.Docs.Admin.Projects [Authorize(DocsAdminPermissions.Projects.Create)] public async Task CreateAsync(CreateProjectDto input) { + if (await _projectRepository.ShortNameExistsAsync(input.ShortName)) + { + throw new ProjectShortNameAlreadyExistsException(input.ShortName); + } + var project = new Project(_guidGenerator.Create(), input.Name, input.ShortName, @@ -64,9 +69,9 @@ namespace Volo.Docs.Admin.Projects foreach (var extraProperty in input.ExtraProperties) { - project.ExtraProperties.Add(extraProperty.Key,extraProperty.Value); + project.ExtraProperties.Add(extraProperty.Key, extraProperty.Value); } - + project = await _projectRepository.InsertAsync(project); return ObjectMapper.Map(project); @@ -101,5 +106,6 @@ namespace Volo.Docs.Admin.Projects { await _projectRepository.DeleteAsync(id); } + } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/DocsDomainSharedModule.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/DocsDomainSharedModule.cs index 6c12059eff..d0df3af2fb 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/DocsDomainSharedModule.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/DocsDomainSharedModule.cs @@ -1,4 +1,5 @@ using Volo.Abp.Localization; +using Volo.Abp.Localization.ExceptionHandling; using Volo.Abp.Modularity; using Volo.Docs.Localization; @@ -13,6 +14,11 @@ namespace Volo.Docs { options.Resources.Add("en"); }); + + Configure(options => + { + options.MapCodeNamespace("Volo.Docs.Domain", typeof(DocsResource)); + }); } } } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json index e8c7122ec3..6299a9aab2 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json @@ -23,6 +23,7 @@ "New": "New", "Upd": "Upd", "NewExplanation": "Created in the last two weeks.", - "UpdatedExplanation": "Updated in the last two weeks." + "UpdatedExplanation": "Updated in the last two weeks.", + "Volo.Docs.Domain:010002": "ShortName {ShortName} already exists." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json index 3d9df18295..ef4e95f3dc 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json @@ -22,6 +22,7 @@ "New": "新文档", "Upd": "更新", "NewExplanation": "在最近两周内创建.", - "UpdatedExplanation": "在最近两周内更新." + "UpdatedExplanation": "在最近两周内更新.", + "Volo.Docs.Domain:010002": "简称 {ShortName} 已经存在." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json index 9fbc677120..6a2f4d8799 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json @@ -18,9 +18,11 @@ "DocumentNotFoundInSelectedLanguage": "本文件不適用於所選語系,將以預設語系顯示.", "FilterTopics": "過濾主題", "FullSearch": "搜索文件", + "Volo.Docs.Domain:010001": "Elastic search未啟用.", "New": "新文檔", "Upd": "更新", "NewExplanation": "在最近兩周內創建.", - "UpdatedExplanation": "在最近兩周內更新." + "UpdatedExplanation": "在最近兩周內更新.", + "Volo.Docs.Domain:010002": "簡稱 {ShortName} 已經存在." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/IProjectRepository.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/IProjectRepository.cs index 4a6ad77ddd..add77749b4 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/IProjectRepository.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/IProjectRepository.cs @@ -10,5 +10,7 @@ namespace Volo.Docs.Projects Task> GetListAsync(string sorting, int maxResultCount, int skipCount); Task GetByShortNameAsync(string shortName); + + Task ShortNameExistsAsync(string shortName); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/ProjectShortNameAlreadyExistsException.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/ProjectShortNameAlreadyExistsException.cs new file mode 100644 index 0000000000..b61972d60b --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/ProjectShortNameAlreadyExistsException.cs @@ -0,0 +1,13 @@ +using Volo.Abp; + +namespace Volo.Docs.Projects +{ + public class ProjectShortNameAlreadyExistsException : BusinessException + { + public ProjectShortNameAlreadyExistsException(string shortName) + : base("Volo.Docs.Domain:010002") + { + WithData("ShortName", shortName); + } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs index b54869edcd..0611624029 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs @@ -13,10 +13,9 @@ namespace Volo.Docs.Projects { public class EfCoreProjectRepository : EfCoreRepository, IProjectRepository { - public EfCoreProjectRepository(IDbContextProvider dbContextProvider) + public EfCoreProjectRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { - } public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount) @@ -39,5 +38,10 @@ namespace Volo.Docs.Projects return project; } + + public async Task ShortNameExistsAsync(string shortName) + { + return await DbSet.AnyAsync(x => x.ShortName == shortName); + } } -} +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs index 6f2359e339..1dbb646405 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs @@ -14,7 +14,8 @@ namespace Volo.Docs.Projects { public class MongoProjectRepository : MongoDbRepository, IProjectRepository { - public MongoProjectRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + public MongoProjectRepository(IMongoDbContextProvider dbContextProvider) : base( + dbContextProvider) { } @@ -38,5 +39,10 @@ namespace Volo.Docs.Projects return project; } + + public async Task ShortNameExistsAsync(string shortName) + { + return await GetMongoQueryable().AnyAsync(x => x.ShortName == shortName); + } } -} +} \ No newline at end of file