Browse Source

Make docs module shortName unique

pull/3556/head
liangshiwei 7 years ago
parent
commit
a18c190cdc
  1. 10
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs
  2. 6
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/DocsDomainSharedModule.cs
  3. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json
  4. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json
  5. 4
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json
  6. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/IProjectRepository.cs
  7. 13
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/ProjectShortNameAlreadyExistsException.cs
  8. 10
      modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs
  9. 10
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs

10
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)] [Authorize(DocsAdminPermissions.Projects.Create)]
public async Task<ProjectDto> CreateAsync(CreateProjectDto input) public async Task<ProjectDto> CreateAsync(CreateProjectDto input)
{ {
if (await _projectRepository.ShortNameExistsAsync(input.ShortName))
{
throw new ProjectShortNameAlreadyExistsException(input.ShortName);
}
var project = new Project(_guidGenerator.Create(), var project = new Project(_guidGenerator.Create(),
input.Name, input.Name,
input.ShortName, input.ShortName,
@ -64,9 +69,9 @@ namespace Volo.Docs.Admin.Projects
foreach (var extraProperty in input.ExtraProperties) 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); project = await _projectRepository.InsertAsync(project);
return ObjectMapper.Map<Project, ProjectDto>(project); return ObjectMapper.Map<Project, ProjectDto>(project);
@ -101,5 +106,6 @@ namespace Volo.Docs.Admin.Projects
{ {
await _projectRepository.DeleteAsync(id); await _projectRepository.DeleteAsync(id);
} }
} }
} }

6
modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/DocsDomainSharedModule.cs

@ -1,4 +1,5 @@
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Localization.ExceptionHandling;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Docs.Localization; using Volo.Docs.Localization;
@ -13,6 +14,11 @@ namespace Volo.Docs
{ {
options.Resources.Add<DocsResource>("en"); options.Resources.Add<DocsResource>("en");
}); });
Configure<AbpExceptionLocalizationOptions>(options =>
{
options.MapCodeNamespace("Volo.Docs.Domain", typeof(DocsResource));
});
} }
} }
} }

3
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json

@ -23,6 +23,7 @@
"New": "New", "New": "New",
"Upd": "Upd", "Upd": "Upd",
"NewExplanation": "Created in the last two weeks.", "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."
} }
} }

3
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json

@ -22,6 +22,7 @@
"New": "新文档", "New": "新文档",
"Upd": "更新", "Upd": "更新",
"NewExplanation": "在最近两周内创建.", "NewExplanation": "在最近两周内创建.",
"UpdatedExplanation": "在最近两周内更新." "UpdatedExplanation": "在最近两周内更新.",
"Volo.Docs.Domain:010002": "简称 {ShortName} 已经存在."
} }
} }

4
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json

@ -18,9 +18,11 @@
"DocumentNotFoundInSelectedLanguage": "本文件不適用於所選語系,將以預設語系顯示.", "DocumentNotFoundInSelectedLanguage": "本文件不適用於所選語系,將以預設語系顯示.",
"FilterTopics": "過濾主題", "FilterTopics": "過濾主題",
"FullSearch": "搜索文件", "FullSearch": "搜索文件",
"Volo.Docs.Domain:010001": "Elastic search未啟用.",
"New": "新文檔", "New": "新文檔",
"Upd": "更新", "Upd": "更新",
"NewExplanation": "在最近兩周內創建.", "NewExplanation": "在最近兩周內創建.",
"UpdatedExplanation": "在最近兩周內更新." "UpdatedExplanation": "在最近兩周內更新.",
"Volo.Docs.Domain:010002": "簡稱 {ShortName} 已經存在."
} }
} }

2
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/IProjectRepository.cs

@ -10,5 +10,7 @@ namespace Volo.Docs.Projects
Task<List<Project>> GetListAsync(string sorting, int maxResultCount, int skipCount); Task<List<Project>> GetListAsync(string sorting, int maxResultCount, int skipCount);
Task<Project> GetByShortNameAsync(string shortName); Task<Project> GetByShortNameAsync(string shortName);
Task<bool> ShortNameExistsAsync(string shortName);
} }
} }

13
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);
}
}
}

10
modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs

@ -13,10 +13,9 @@ namespace Volo.Docs.Projects
{ {
public class EfCoreProjectRepository : EfCoreRepository<IDocsDbContext, Project, Guid>, IProjectRepository public class EfCoreProjectRepository : EfCoreRepository<IDocsDbContext, Project, Guid>, IProjectRepository
{ {
public EfCoreProjectRepository(IDbContextProvider<IDocsDbContext> dbContextProvider) public EfCoreProjectRepository(IDbContextProvider<IDocsDbContext> dbContextProvider)
: base(dbContextProvider) : base(dbContextProvider)
{ {
} }
public async Task<List<Project>> GetListAsync(string sorting, int maxResultCount, int skipCount) public async Task<List<Project>> GetListAsync(string sorting, int maxResultCount, int skipCount)
@ -39,5 +38,10 @@ namespace Volo.Docs.Projects
return project; return project;
} }
public async Task<bool> ShortNameExistsAsync(string shortName)
{
return await DbSet.AnyAsync(x => x.ShortName == shortName);
}
} }
} }

10
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs

@ -14,7 +14,8 @@ namespace Volo.Docs.Projects
{ {
public class MongoProjectRepository : MongoDbRepository<IDocsMongoDbContext, Project, Guid>, IProjectRepository public class MongoProjectRepository : MongoDbRepository<IDocsMongoDbContext, Project, Guid>, IProjectRepository
{ {
public MongoProjectRepository(IMongoDbContextProvider<IDocsMongoDbContext> dbContextProvider) : base(dbContextProvider) public MongoProjectRepository(IMongoDbContextProvider<IDocsMongoDbContext> dbContextProvider) : base(
dbContextProvider)
{ {
} }
@ -38,5 +39,10 @@ namespace Volo.Docs.Projects
return project; return project;
} }
public async Task<bool> ShortNameExistsAsync(string shortName)
{
return await GetMongoQueryable().AnyAsync(x => x.ShortName == shortName);
}
} }
} }
Loading…
Cancel
Save