diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index 1150af8ea4..848805d09e 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -220,37 +220,6 @@ namespace Volo.Docs.Admin.Documents public Task GetFilterItemsAsync() { - // return _filterItemsCache.GetAsync( - // CacheKeyGenerator.GenerateFilterItemsCacheKey(), - // async () => - // { - // var filterItems = new FilterItems(); - // var projects = await _projectRepository.GetListAsync(); - // foreach (var project in projects) - // { - // var projectFilterItems = new FilterItems(); - // var documents = await _documentRepository.GetListByProjectId(project.Id); - // foreach (var document in documents) - // { - // projectFilterItems.Add(new FilterItem - // { - // Name = document.Name, - // Value = document.Name - // }); - // } - // - // filterItems.Add(new FilterItem - // { - // Name = project.Name, - // Value = project.Name, - // Items = projectFilterItems - // }); - // } - // - // return filterItems; - // } - // ); - return _documentRepository.GetFilterItemsAsync(); } diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs index df33e23374..9dd8495dd6 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs @@ -63,9 +63,9 @@ public partial class DocumentsAdminClientProxy : ClientProxyBase GetFilterItemsAsync() + + public async Task GetFilterItemsAsync() { - throw new NotImplementedException(); + return await RequestAsync(nameof(GetFilterItemsAsync)); } } diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.cs index 34899f1c49..7c6806b4a8 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.cs @@ -1,7 +1,12 @@ // This file is part of DocumentsAdminClientProxy, you can customize it here // ReSharper disable once CheckNamespace + +using System.Threading.Tasks; +using Volo.Docs.Documents.Filter; + namespace Volo.Docs.Admin.ClientProxies; public partial class DocumentsAdminClientProxy { + } diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs index 9cd3e6df1b..e226d8cf6b 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs @@ -9,8 +9,5 @@ namespace Volo.Docs.Admin.ClientProxies; public partial class ProjectsAdminClientProxy { - public async Task GetFilterComboboxAsync() - { - return await this.RequestAsync(nameof(GetFilterComboboxAsync)); - } + } diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterItems.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterItems.cs new file mode 100644 index 0000000000..f446d8bcc4 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterItems.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace Volo.Docs.Documents.Filter; + +public class FilterItems +{ + public IEnumerable Projects { get; set; } + public IEnumerable Versions { get; set; } + public IEnumerable Languages { get; set; } + public IEnumerable Formats { get; set; } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterLanguageCodeItem.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterLanguageCodeItem.cs new file mode 100644 index 0000000000..5cdda57af6 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterLanguageCodeItem.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Docs.Documents.Filter; + +public class FilterLanguageCodeItem +{ + public string Code { get; set; } + public IEnumerable ProjectIds { get; set; } + public IEnumerable Versions { get; set; } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterProjectItem.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterProjectItem.cs new file mode 100644 index 0000000000..a4dc668255 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterProjectItem.cs @@ -0,0 +1,9 @@ +using System; + +namespace Volo.Docs.Documents.Filter; + +public class FilterProjectItem +{ + public Guid Id { get; set; } + public string Name { get; set; } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterVersionItem.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterVersionItem.cs new file mode 100644 index 0000000000..02dc9de8e2 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterVersionItem.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Docs.Documents.Filter; + +public class FilterVersionItem +{ + public string Version { get; set; } + public IEnumerable ProjectIds { get; set; } + public IEnumerable Languages { get; set; } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs deleted file mode 100644 index 989eeea266..0000000000 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Volo.Docs.Documents.Filter; - -public class FilterItems -{ - public IEnumerable Projects { get; set; } - public IEnumerable Versions { get; set; } - public IEnumerable Languages { get; set; } - public IEnumerable Formats { get; set; } -} -public class FilterProjectItem -{ - public Guid Id { get; set; } - public string Name { get; set; } -} -public class FilterVersionItem -{ - public string Version { get; set; } - public IEnumerable ProjectIds { get; set; } - public IEnumerable Languages { get; set; } -} -public class FilterLanguageCodeItem -{ - public string Code { get; set; } - public IEnumerable ProjectIds { get; set; } - public IEnumerable Versions { get; set; } -} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index 98c46d7d3d..ceb2415ea4 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -219,33 +219,40 @@ namespace Volo.Docs.Documents } public async Task GetFilterItemsAsync(CancellationToken cancellationToken = default) { - var dbContext = await GetDbContextAsync(); - var filterItems = new FilterItems(); - filterItems.Formats = await dbContext.Documents.Select(x => x.Format).Distinct().ToListAsync(cancellationToken); + filterItems.Formats = await GetFormats(cancellationToken); + + filterItems.Projects = await GetFilterProjectItems(cancellationToken); + + filterItems.Versions = await GetFilterVersionItems(cancellationToken); + + filterItems.Languages = await GetFilterLanguageCodeItems(cancellationToken); + + return filterItems; + } + + private async Task> GetFormats(CancellationToken cancellationToken) + { + return await (await GetDbSetAsync()).Select(x => x.Format).Distinct().ToListAsync(cancellationToken); + } - filterItems.Projects = await dbContext.Projects - .Select(x=>new FilterProjectItem() + private async Task> GetFilterProjectItems(CancellationToken cancellationToken) + { + return await (await GetDbContextAsync()) + .Projects + .Select(x=>new FilterProjectItem { Id = x.Id, Name = x.Name }) .OrderBy(x=>x.Name) .ToListAsync(GetCancellationToken(cancellationToken)); + } - filterItems.Versions = await dbContext.Documents - .GroupBy(x => x.Version) - .Select(x => new FilterVersionItem - { - ProjectIds = x.Select(x2 => x2.ProjectId).Distinct(), - Version = x.Key, - Languages = x.Select(x2 => x2.LanguageCode).Distinct() - }) - .OrderByDescending(x => x.Version) - .ToListAsync(GetCancellationToken(cancellationToken)); - - filterItems.Languages = await dbContext.Documents + private async Task> GetFilterLanguageCodeItems(CancellationToken cancellationToken) + { + return await (await GetDbSetAsync()) .GroupBy(x => x.LanguageCode) .Select(x => new FilterLanguageCodeItem { @@ -255,9 +262,20 @@ namespace Volo.Docs.Documents }) .OrderBy(x=>x.Code) .ToListAsync(GetCancellationToken(cancellationToken)); + } - - return filterItems; + private async Task> GetFilterVersionItems(CancellationToken cancellationToken) + { + return await (await GetDbSetAsync()) + .GroupBy(x => x.Version) + .Select(x => new FilterVersionItem + { + ProjectIds = x.Select(x2 => x2.ProjectId).Distinct(), + Version = x.Key, + Languages = x.Select(x2 => x2.LanguageCode).Distinct() + }) + .OrderByDescending(x => x.Version) + .ToListAsync(GetCancellationToken(cancellationToken)); } } } diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index 38ed1ddd6d..529f4cb4c4 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -10,6 +10,7 @@ using MongoDB.Driver.Linq; using MongoDB.Driver; using Volo.Docs.Documents.Filter; using Volo.Docs.MongoDB; +using Volo.Docs.Projects; namespace Volo.Docs.Documents @@ -157,9 +158,64 @@ namespace Volo.Docs.Documents return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(GetCancellationToken(cancellationToken)); } - public Task GetFilterItemsAsync(CancellationToken cancellationToken = default) + public async Task GetFilterItemsAsync(CancellationToken cancellationToken = default) { - throw new NotImplementedException(); + var filterItems = new FilterItems(); + + filterItems.Formats = await GetFormats(cancellationToken); + + filterItems.Projects = await GetFilterProjectItems(cancellationToken); + + filterItems.Versions = await GetFilterVersionItems(cancellationToken); + + filterItems.Languages = await GetFilterLanguageCodeItems(cancellationToken); + + return filterItems; + } + + private async Task> GetFormats(CancellationToken cancellationToken) + { + return await (await GetMongoQueryableAsync(cancellationToken)).Select(x => x.Format).Distinct().ToListAsync(cancellationToken); + } + + private async Task> GetFilterProjectItems(CancellationToken cancellationToken) + { + return await (await GetMongoQueryableAsync(cancellationToken)) + .Select(x=>new FilterProjectItem + { + Id = x.Id, + Name = x.Name + }) + .OrderBy(x=>x.Name) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + private async Task> GetFilterLanguageCodeItems(CancellationToken cancellationToken) + { + return await (await GetMongoQueryableAsync(cancellationToken)) + .GroupBy(x => x.LanguageCode) + .Select(x => new FilterLanguageCodeItem + { + ProjectIds = x.Select(x2 => x2.ProjectId).Distinct(), + Code = x.Key, + Versions = x.Select(x2 => x2.Version).Distinct() + }) + .OrderBy(x=>x.Code) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + private async Task> GetFilterVersionItems(CancellationToken cancellationToken) + { + return await (await GetMongoQueryableAsync(cancellationToken)) + .GroupBy(x => x.Version) + .Select(x => new FilterVersionItem + { + ProjectIds = x.Select(x2 => x2.ProjectId).Distinct(), + Version = x.Key, + Languages = x.Select(x2 => x2.LanguageCode).Distinct() + }) + .OrderByDescending(x => x.Version) + .ToListAsync(GetCancellationToken(cancellationToken)); } protected virtual async Task> ApplyFilterForGetAll( @@ -204,6 +260,11 @@ namespace Volo.Docs.Documents { query = query.Where(d => d.FileName != null && d.FileName.Contains(fileName)); } + + if (format != null) + { + query = query.Where(d => d.Format != null && d.Format == format); + } if (creationTimeMin.HasValue) {