diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDomainModule.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDomainModule.cs index f58eb638e6..6453dfe5aa 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDomainModule.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDomainModule.cs @@ -2,6 +2,8 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; +using Volo.Docs.Documents; +using Volo.Docs.GitHub.Documents; using Volo.Docs.Localization; namespace Volo.Docs @@ -26,6 +28,11 @@ namespace Volo.Docs .Get() .AddVirtualJson("/Volo/Docs/Localization/Domain"); }); + + Configure(options => + { + options.Stores[GithubDocumentStore.Type] = typeof(GithubDocumentStore); + }); } } } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs index 387d4b2d83..0cd2b75f7f 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs @@ -1,29 +1,33 @@ using System; +using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; namespace Volo.Docs.Documents { public class DocumentStoreFactory : IDocumentStoreFactory, ITransientDependency { - private readonly IServiceProvider _serviceProvider; + protected DocumentStoreOptions Options { get; } + protected IServiceProvider ServiceProvider { get; } - public DocumentStoreFactory(IServiceProvider serviceProvider) + public DocumentStoreFactory( + IServiceProvider serviceProvider, + IOptions options) { - _serviceProvider = serviceProvider; + Options = options.Value; + ServiceProvider = serviceProvider; } - public virtual IDocumentStore Create(string documentStoreType) + public virtual IDocumentStore Create(string storeType) { - //TODO: Should be extensible - - switch (documentStoreType) + var serviceType = Options.Stores.GetOrDefault(storeType); + if (serviceType == null) { - case GithubDocumentStore.Type: - return _serviceProvider.GetRequiredService(); - default: - throw new ApplicationException($"Undefined document store: {documentStoreType}"); + throw new ApplicationException($"Undefined document store: {storeType}"); } + + return (IDocumentStore) ServiceProvider.GetRequiredService(serviceType); } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreOptions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreOptions.cs new file mode 100644 index 0000000000..fcc5781d98 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreOptions.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Docs.Documents +{ + public class DocumentStoreOptions + { + public Dictionary Stores { get; set; } + + public DocumentStoreOptions() + { + Stores = new Dictionary(); + } + } +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentStoreFactory.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentStoreFactory.cs index 7711c3d0d7..3a997eb26d 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentStoreFactory.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentStoreFactory.cs @@ -2,6 +2,6 @@ namespace Volo.Docs.Documents { public interface IDocumentStoreFactory { - IDocumentStore Create(string documentStoreType); + IDocumentStore Create(string storeType); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/ProjectGithubExtensions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/ProjectGithubExtensions.cs deleted file mode 100644 index efe53e2de1..0000000000 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/ProjectGithubExtensions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using Volo.Docs.Projects; - -namespace Volo.Docs.Documents -{ - public static class ProjectGithubExtensions - { - public static string GetGithubUrl(this Projects.Project project) - { - CheckGithubProject(project); - return project.ExtraProperties["GithubRootUrl"] as string; - } - - public static void SetGithubUrl(this Projects.Project project, string value) - { - CheckGithubProject(project); - project.ExtraProperties["GithubRootUrl"] = value; - } - - private static void CheckGithubProject(Project project) - { - if (project.DocumentStoreType != GithubDocumentStore.Type) - { - throw new ApplicationException("Given project has not a Github document store!"); - } - } - } -} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/GithubDocumentStore.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs similarity index 88% rename from modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/GithubDocumentStore.cs rename to modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs index adc570940b..fb109a941e 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/GithubDocumentStore.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs @@ -1,27 +1,26 @@ -using Microsoft.Extensions.Logging; -using Octokit; -using Octokit.Internal; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Octokit; +using Octokit.Internal; using Volo.Abp.Domain.Services; +using Volo.Docs.Documents; +using Volo.Docs.GitHub.Projects; using Volo.Docs.Projects; using ProductHeaderValue = Octokit.ProductHeaderValue; -namespace Volo.Docs.Documents +namespace Volo.Docs.GitHub.Documents { public class GithubDocumentStore : DomainService, IDocumentStore { - public const string Type = "Github"; //TODO: Convert to "github" + public const string Type = "GitHub"; - public Task FindDocument( - Projects.Project project, - string documentName, - string version) + public Task FindDocument(Docs.Projects.Project project, string documentName, string version) { - var rootUrl = project.GetGithubUrl() + var rootUrl = project.GetGitHubUrl() .Replace("_version_/", version + "/") .Replace("www.", ""); //TODO: Can be a problem? @@ -43,7 +42,7 @@ namespace Volo.Docs.Documents ); } - var token = project.ExtraProperties["GithubAccessToken"]?.ToString(); //TODO: Define GetGithubAccessToken extension method + var token = project.GetGitHubAccessTokenOrNull(); var document = new Document { @@ -86,13 +85,13 @@ namespace Volo.Docs.Documents { try { - var token = project.ExtraProperties["GithubAccessToken"]?.ToString(); + var token = project.GetGitHubAccessTokenOrNull(); var gitHubClient = token.IsNullOrWhiteSpace() ? new GitHubClient(new ProductHeaderValue("AbpWebSite")) : new GitHubClient(new ProductHeaderValue("AbpWebSite"), new InMemoryCredentialStore(new Credentials(token))); - var url = project.ExtraProperties["GithubRootUrl"].ToString(); + var url = project.GetGitHubUrl(); var releases = await gitHubClient.Repository.Release.GetAll( GetGithubOrganizationNameFromUrl(url), GetGithubRepositoryNameFromUrl(url) diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs new file mode 100644 index 0000000000..7504d8be86 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs @@ -0,0 +1,45 @@ +using System; +using JetBrains.Annotations; +using Volo.Abp; +using Volo.Docs.GitHub.Documents; +using Volo.Docs.Projects; + +namespace Volo.Docs.GitHub.Projects +{ + public static class ProjectGithubExtensions + { + public static string GetGitHubUrl([NotNull] this Project project) + { + CheckGitHubProject(project); + return project.ExtraProperties["GitHubRootUrl"] as string; + } + + public static void SetGitHubUrl([NotNull] this Project project, string value) + { + CheckGitHubProject(project); + project.ExtraProperties["GitHubRootUrl"] = value; + } + + public static string GetGitHubAccessTokenOrNull([NotNull] this Project project) + { + CheckGitHubProject(project); + return project.ExtraProperties["GitHubAccessToken"] as string; + } + + public static void SetGitHubAccessToken([NotNull] this Project project, string value) + { + CheckGitHubProject(project); + project.ExtraProperties["GitHubAccessToken"] = value; + } + + private static void CheckGitHubProject(Project project) + { + Check.NotNull(project, nameof(project)); + + if (project.DocumentStoreType != GithubDocumentStore.Type) + { + throw new ApplicationException("Given project has not a Github document store!"); + } + } + } +} \ No newline at end of file