diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs index 63dcaccbb0..d47ff0dab6 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Services; -using Volo.Docs.Projects; namespace Volo.Docs.Documents { @@ -13,21 +12,18 @@ namespace Volo.Docs.Documents string version, bool normalize); + Task GetDefaultAsync( + string projectShortName, + string version, + bool normalize); + Task GetNavigationDocumentAsync( string projectShortName, string version, bool normalize); Task> GetVersions( - string projectShortName, - string defaultDocumentName, - string documentStoreType, - string documentName); - - Task GetDocument( - ProjectDto projectDto, - string documentName, - string version, - bool normalize); + string projectShortName + ); } } \ No newline at end of file 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 d5d624cfe2..f640d023bc 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 @@ -25,64 +25,79 @@ namespace Volo.Docs.Documents _documentStoreFactory = documentStoreFactory; } - public async Task GetByNameAsync(string projectShortName, string documentName, string version, bool normalize) + public async Task GetByNameAsync( + string projectShortName, + string documentName, + string version, + bool normalize) { var project = await _projectRepository.GetByShortNameAsync(projectShortName); - - return await GetDocument(ObjectMapper.Map(project), documentName, version, normalize); + return await GetDocumentWithDetailsDto( + project, + documentName, + version, + normalize + ); } - public async Task GetNavigationDocumentAsync(string projectShortName, string version, bool normalize) + public async Task GetDefaultAsync( + string projectShortName, + string version, + bool normalize) { var project = await _projectRepository.GetByShortNameAsync(projectShortName); - - return ObjectMapper.Map( - await GetDocument(ObjectMapper.Map(project), project.NavigationDocumentName, - version, normalize)); + return await GetDocumentWithDetailsDto( + project, + project.DefaultDocumentName, + version, + normalize + ); } - public async Task GetDocument(ProjectDto projectDto, string documentName, string version, bool normalize) + public virtual async Task GetNavigationDocumentAsync( + string projectShortName, + string version, + bool normalize) { - if (projectDto == null) - { - throw new ArgumentNullException(nameof(projectDto)); - } - - var project = await _projectRepository.GetAsync(projectDto.Id); - - if (string.IsNullOrWhiteSpace(documentName)) - { - documentName = projectDto.DefaultDocumentName; - } - - IDocumentStore documentStore = _documentStoreFactory.Create(projectDto.DocumentStoreType); + var project = await _projectRepository.GetByShortNameAsync(projectShortName); + var documentDto = await GetDocumentWithDetailsDto( + project, + project.NavigationDocumentName, + version, + normalize + ); + + return ObjectMapper.Map(documentDto); + } - Document document = await documentStore.FindDocumentByNameAsync(project.ExtraProperties, projectDto.Format, documentName, version); + protected virtual async Task GetDocumentWithDetailsDto( + Project project, + string documentName, + string version, + bool normalize) + { + var documentStore = _documentStoreFactory.Create(project.DocumentStoreType); + var document = await documentStore.Find(project, documentName, version); var dto = ObjectMapper.Map(document); - - dto.Project = projectDto; + dto.Project = ObjectMapper.Map(project); return dto; } - public async Task> GetVersions(string projectShortName, string defaultDocumentName, - string documentStoreType, string documentName) + public async Task> GetVersions( + string projectShortName + ) { var project = await _projectRepository.GetByShortNameAsync(projectShortName); - if (string.IsNullOrWhiteSpace(documentName)) - { - documentName = defaultDocumentName; - } - - var documentStore = _documentStoreFactory.Create(documentStoreType); + var documentStore = _documentStoreFactory.Create(project.DocumentStoreType); var versions = await GetVersionsFromCache(projectShortName); if (versions == null) { - versions = await documentStore.GetVersions(project.ExtraProperties, documentName); + versions = await documentStore.GetVersions(project); await SetVersionsToCache(projectShortName, versions); } diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/GithubDocumentStore.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/GithubDocumentStore.cs index de48edd87e..488d60652d 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/GithubDocumentStore.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/GithubDocumentStore.cs @@ -21,11 +21,11 @@ namespace Volo.Docs.Documents public const int DocumentNotFoundExceptionCode = 20181001; - public async Task FindDocumentByNameAsync(Dictionary projectExtraProperties, string projectFormat, string documentName, string version) + public async Task Find(Volo.Docs.Projects.Project project, string documentName, string version) { - var rootUrl = projectExtraProperties["GithubRootUrl"].ToString().Replace("_version_/", version + "/").Replace("www.", ""); + var rootUrl = project.ExtraProperties["GithubRootUrl"].ToString().Replace("_version_/", version + "/").Replace("www.", ""); - var token = projectExtraProperties["GithubAccessToken"]?.ToString(); + var token = project.ExtraProperties["GithubAccessToken"]?.ToString(); var rawRootUrl = rootUrl.Replace("github.com", "raw.githubusercontent.com").Replace("/tree/", "/"); var rawUrl = rawRootUrl + documentName; @@ -46,7 +46,7 @@ namespace Volo.Docs.Documents EditLink = editLink, RootUrl = rootUrl, RawRootUrl = rawRootUrl, - Format = projectFormat, + Format = project.Format, LocalDirectory = localDirectory, FileName = fileName, Version = version, @@ -80,17 +80,17 @@ namespace Volo.Docs.Documents } } - public async Task> GetVersions(Dictionary projectExtraProperties, string documentName) + public async Task> GetVersions(Volo.Docs.Projects.Project project) { try { - var token = projectExtraProperties["GithubAccessToken"]?.ToString(); + var token = project.ExtraProperties["GithubAccessToken"]?.ToString(); var gitHubClient = token.IsNullOrWhiteSpace() ? new GitHubClient(new ProductHeaderValue("AbpWebSite")) : new GitHubClient(new ProductHeaderValue("AbpWebSite"), new InMemoryCredentialStore(new Credentials(token))); - var url = projectExtraProperties["GithubRootUrl"].ToString(); + var url = project.ExtraProperties["GithubRootUrl"].ToString(); var releases = await gitHubClient.Repository.Release.GetAll( GetGithubOrganizationNameFromUrl(url), GetGithubRepositoryNameFromUrl(url) diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/IDocumentStore.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/IDocumentStore.cs index 47039cd57a..7508e54eff 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/IDocumentStore.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/IDocumentStore.cs @@ -1,14 +1,20 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Domain.Services; +using Volo.Docs.Projects; namespace Volo.Docs.Documents { public interface IDocumentStore : IDomainService { - Task FindDocumentByNameAsync(Dictionary projectExtraProperties, string projectFormat, - string documentName, string version); + Task Find( + Project project, + string documentName, + string version + ); - Task> GetVersions(Dictionary projectExtraProperties, string documentName); + Task> GetVersions( + Project project + ); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 5f8c30f4a1..af530a62a9 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -87,10 +87,9 @@ namespace Volo.Docs.Pages.Documents.Project private async Task SetVersionAsync(ProjectDto project) { - Versions = (await _documentAppService - .GetVersions(project.ShortName, project.DefaultDocumentName, - project.DocumentStoreType, DocumentNameWithExtension)) - .Select(v => new VersionInfo(v.DisplayName, v.Name)).ToList(); + var versionInfoDtos = await _documentAppService.GetVersions(project.ShortName); + + Versions = versionInfoDtos.Select(v => new VersionInfo(v.DisplayName, v.Name)).ToList(); LatestVersionInfo = GetLatestVersion(); @@ -153,7 +152,15 @@ namespace Volo.Docs.Pages.Documents.Project private async Task SetDocumentAsync() { - Document = await _documentAppService.GetByNameAsync(ProjectName, DocumentNameWithExtension, Version, true); + if (DocumentNameWithExtension.IsNullOrWhiteSpace()) + { + Document = await _documentAppService.GetDefaultAsync(ProjectName, Version, true); + } + else + { + Document = await _documentAppService.GetByNameAsync(ProjectName, DocumentNameWithExtension, Version, true); + } + var converter = _documentConverterFactory.Create(Document.Format ?? ProjectFormat); var content = converter.NormalizeLinks(Document.Content, Document.Project.ShortName, GetSpecificVersionOrLatest(), Document.LocalDirectory);