From 688cd23f7e5ce6c7e16236ebcccdbebd505ea723 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 31 May 2019 11:00:38 +0300 Subject: [PATCH] docs language refactor --- .../app/VoloDocs.Web/Pages/Index.cshtml.cs | 2 +- .../Docs/Documents/DocumentWithDetailsDto.cs | 2 - .../Volo/Docs/Projects/IProjectAppService.cs | 7 +- .../Volo/Docs/Projects/ProjectDto.cs | 2 - .../Docs/DocsApplicationAutoMapperProfile.cs | 4 +- .../Volo/Docs/Documents/DocumentAppService.cs | 42 +--------- .../Volo/Docs/Projects/ProjectAppService.cs | 47 ++++++++--- .../Volo/Docs/Language}/LanguageConfig.cs | 0 .../Docs/Language}/LanguageConfigElement.cs | 0 .../Docs/Projects/DocsProjectController.cs | 12 ++- .../Pages/Documents/Index.cshtml.cs | 2 +- .../Pages/Documents/Project/Index.cshtml | 7 +- .../Pages/Documents/Project/Index.cshtml.cs | 82 +++++++++++++++---- 13 files changed, 128 insertions(+), 81 deletions(-) rename modules/docs/src/{Volo.Docs.Domain/Volo/Docs/Documents => Volo.Docs.Domain.Shared/Volo/Docs/Language}/LanguageConfig.cs (100%) rename modules/docs/src/{Volo.Docs.Domain/Volo/Docs/Documents => Volo.Docs.Domain.Shared/Volo/Docs/Language}/LanguageConfigElement.cs (100%) diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs index 25d42e3ac2..c60f2d682b 100644 --- a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs +++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs @@ -28,7 +28,7 @@ namespace VoloDocs.Web.Pages { projectName = Projects[0].ShortName, version = DocsAppConsts.Latest, - languageCode = await _projectAppService.GetDefaultLanguageCode(Projects[0].ShortName), + languageCode = "", documentName = Projects[0].DefaultDocumentName }); } diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs index 43fab40c0c..44b2ef6861 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs @@ -25,8 +25,6 @@ namespace Volo.Docs.Documents public string FileName { get; set; } - public string CurrentLanguageCode { get; set; } - public ProjectDto Project { get; set; } public List Contributors { get; set; } diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/IProjectAppService.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/IProjectAppService.cs index d7fdb6759d..44f4cbf3b8 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/IProjectAppService.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/IProjectAppService.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.Docs.Documents; namespace Volo.Docs.Projects { @@ -9,9 +10,11 @@ namespace Volo.Docs.Projects Task> GetListAsync(); Task GetAsync(string shortName); - - Task GetDefaultLanguageCode(string shortName); Task> GetVersionsAsync(string shortName); + + Task GetDefaultLanguageCode(string shortName, string version); + + Task GetLanguageListAsync(string shortName, string version); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/ProjectDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/ProjectDto.cs index a9ec815a6c..91f5c63a22 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/ProjectDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Projects/ProjectDto.cs @@ -26,7 +26,5 @@ namespace Volo.Docs.Projects public string DocumentStoreType { get; set; } public Dictionary ExtraProperties { get; set; } - - public Dictionary Languages { get; set; } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs index 2f029f3a39..d29828ad05 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs @@ -9,10 +9,10 @@ namespace Volo.Docs { public DocsApplicationAutoMapperProfile() { - CreateMap().Ignore(x=>x.Languages); + CreateMap(); CreateMap(); CreateMap() - .Ignore(x => x.Project).Ignore(x => x.Contributors).Ignore(x => x.CurrentLanguageCode); + .Ignore(x => x.Project).Ignore(x => x.Contributors); CreateMap(); CreateMap(); } diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index 20ecf4d03f..d6e615c22e 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -111,11 +111,9 @@ namespace Volo.Docs.Documents { Logger.LogInformation($"Not found in the cache. Requesting {documentName} from the store..."); var store = _documentStoreFactory.Create(project.DocumentStoreType); - var languages = await GetLanguageListAsync(store, project, version); - var language = GetLanguageByCode(languages, languageCode); - var document = await store.GetDocumentAsync(project, documentName, language.Code, version); + var document = await store.GetDocumentAsync(project, documentName, languageCode, version); Logger.LogInformation($"Document retrieved: {documentName}"); - return CreateDocumentWithDetailsDto(project, document, languages, language.Code); + return CreateDocumentWithDetailsDto(project, document); } if (Debugger.IsAttached) @@ -135,45 +133,11 @@ namespace Volo.Docs.Documents ); } - protected virtual LanguageConfigElement GetLanguageByCode(LanguageConfig languageCodes, string languageCode) - { - var language = languageCodes.Languages.FirstOrDefault(l => l.Code == languageCode); - - return language ?? - languageCodes.Languages.FirstOrDefault(l => l.IsDefault) ?? - languageCodes.Languages.First(); - } - - protected virtual async Task GetLanguageListAsync(IDocumentStore store, Project project, string version) - { - async Task GetLanguagesAsync() - { - return await store.GetLanguageListAsync(project, version); - } - - return await LanguageCache.GetOrAddAsync( - project.ShortName, - GetLanguagesAsync, - () => new DistributedCacheEntryOptions - { - AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24) - } - ); - } - - protected virtual DocumentWithDetailsDto CreateDocumentWithDetailsDto(Project project, Document document, LanguageConfig languages, string languageCode) + protected virtual DocumentWithDetailsDto CreateDocumentWithDetailsDto(Project project, Document document) { var documentDto = ObjectMapper.Map(document); documentDto.Project = ObjectMapper.Map(project); documentDto.Contributors = ObjectMapper.Map, List>(document.Contributors); - - documentDto.Project.Languages = new Dictionary(); - foreach (var language in languages.Languages) - { - documentDto.Project.Languages.Add(language.Code, language.DisplayName); - } - - documentDto.CurrentLanguageCode = languageCode; return documentDto; } } diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Projects/ProjectAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Projects/ProjectAppService.cs index 89de8ea363..99a6c70123 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Projects/ProjectAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Projects/ProjectAppService.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Distributed; -using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Caching; @@ -17,15 +16,18 @@ namespace Volo.Docs.Projects private readonly IProjectRepository _projectRepository; private readonly IDistributedCache> _versionCache; private readonly IDocumentStoreFactory _documentStoreFactory; + protected IDistributedCache LanguageCache { get; } public ProjectAppService( IProjectRepository projectRepository, IDistributedCache> versionCache, - IDocumentStoreFactory documentStoreFactory) + IDocumentStoreFactory documentStoreFactory, + IDistributedCache languageCache) { _projectRepository = projectRepository; _versionCache = versionCache; _documentStoreFactory = documentStoreFactory; + LanguageCache = languageCache; } public async Task> GetListAsync() @@ -44,15 +46,6 @@ namespace Volo.Docs.Projects return ObjectMapper.Map(project); } - public async Task GetDefaultLanguageCode(string shortName) - { - var project = await _projectRepository.GetByShortNameAsync(shortName); - var store = _documentStoreFactory.Create(project.DocumentStoreType); - var languageList = await store.GetLanguageListAsync(project, project.LatestVersionBranchName); - - return (languageList.Languages.FirstOrDefault(l => l.IsDefault) ?? languageList.Languages.First()).Code; - } - public async Task> GetVersionsAsync(string shortName) { var project = await _projectRepository.GetByShortNameAsync(shortName); @@ -99,5 +92,37 @@ namespace Volo.Docs.Projects return versions; } + + public async Task GetLanguageListAsync(string shortName, string version) + { + return await GetLanguageListInternalAsync(shortName, version); + } + + public async Task GetDefaultLanguageCode(string shortName, string version) + { + var languageList = await GetLanguageListInternalAsync(shortName, version); + + return (languageList.Languages.FirstOrDefault(l => l.IsDefault) ?? languageList.Languages.First()).Code; + } + + private async Task GetLanguageListInternalAsync(string shortName, string version) + { + var project = await _projectRepository.GetByShortNameAsync(shortName); + var store = _documentStoreFactory.Create(project.DocumentStoreType); + + async Task GetLanguagesAsync() + { + return await store.GetLanguageListAsync(project, version); + } + + return await LanguageCache.GetOrAddAsync( + project.ShortName, + GetLanguagesAsync, + () => new DistributedCacheEntryOptions + { + AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24) + } + ); + } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfig.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Language/LanguageConfig.cs similarity index 100% rename from modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfig.cs rename to modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Language/LanguageConfig.cs diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfigElement.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Language/LanguageConfigElement.cs similarity index 100% rename from modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfigElement.cs rename to modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Language/LanguageConfigElement.cs diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs index 9b9df7b481..1484025094 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc; +using Volo.Docs.Documents; namespace Volo.Docs.Projects { @@ -36,9 +37,9 @@ namespace Volo.Docs.Projects [HttpGet] [Route("{shortName}/defaultLanguage")] - public Task GetDefaultLanguageCode(string shortName) + public Task GetDefaultLanguageCode(string shortName,string version) { - return ProjectAppService.GetDefaultLanguageCode(shortName); + return ProjectAppService.GetDefaultLanguageCode(shortName, version); } [HttpGet] @@ -47,5 +48,12 @@ namespace Volo.Docs.Projects { return ProjectAppService.GetVersionsAsync(shortName); } + + [HttpGet] + [Route("{shortName}/{versiion}/languageList")] + public Task GetLanguageListAsync(string shortName, string version) + { + return ProjectAppService.GetLanguageListAsync(shortName, version); + } } } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs index 436b0fe8e3..2852c233b5 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs @@ -27,7 +27,7 @@ namespace Volo.Docs.Pages.Documents { projectName = listResult.Items[0].ShortName, version = DocsAppConsts.Latest, - languageCode = await _projectAppService.GetDefaultLanguageCode(listResult.Items[0].ShortName), + languageCode = "", documentName = listResult.Items[0].DefaultDocumentName }); } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index e6991812b9..a7fc072011 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -144,7 +144,6 @@ @if (Model.Document != null) {
-