Browse Source

Refactored #13585

pull/13804/head
Salih 4 years ago
parent
commit
7aafc65af2
  1. 31
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs
  2. 6
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs
  3. 5
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.cs
  4. 5
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs
  5. 11
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterItems.cs
  6. 11
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterLanguageCodeItem.cs
  7. 9
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterProjectItem.cs
  8. 11
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/FilterVersionItem.cs
  9. 29
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs
  10. 56
      modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs
  11. 65
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs

31
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs

@ -220,37 +220,6 @@ namespace Volo.Docs.Admin.Documents
public Task<FilterItems> 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();
}

6
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs

@ -63,9 +63,9 @@ public partial class DocumentsAdminClientProxy : ClientProxyBase<IDocumentAdminA
{ typeof(Guid), documentId }
});
}
public Task<FilterItems> GetFilterItemsAsync()
public async Task<FilterItems> GetFilterItemsAsync()
{
throw new NotImplementedException();
return await RequestAsync<FilterItems>(nameof(GetFilterItemsAsync));
}
}

5
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
{
}

5
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<FilterComboboxValuesDto> GetFilterComboboxAsync()
{
return await this.RequestAsync<FilterComboboxValuesDto>(nameof(GetFilterComboboxAsync));
}
}

11
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<FilterProjectItem> Projects { get; set; }
public IEnumerable<FilterVersionItem> Versions { get; set; }
public IEnumerable<FilterLanguageCodeItem> Languages { get; set; }
public IEnumerable<string> Formats { get; set; }
}

11
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<Guid> ProjectIds { get; set; }
public IEnumerable<string> Versions { get; set; }
}

9
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; }
}

11
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<Guid> ProjectIds { get; set; }
public IEnumerable<string> Languages { get; set; }
}

29
modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs

@ -1,29 +0,0 @@
using System;
using System.Collections.Generic;
namespace Volo.Docs.Documents.Filter;
public class FilterItems
{
public IEnumerable<FilterProjectItem> Projects { get; set; }
public IEnumerable<FilterVersionItem> Versions { get; set; }
public IEnumerable<FilterLanguageCodeItem> Languages { get; set; }
public IEnumerable<string> 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<Guid> ProjectIds { get; set; }
public IEnumerable<string> Languages { get; set; }
}
public class FilterLanguageCodeItem
{
public string Code { get; set; }
public IEnumerable<Guid> ProjectIds { get; set; }
public IEnumerable<string> Versions { get; set; }
}

56
modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs

@ -219,33 +219,40 @@ namespace Volo.Docs.Documents
}
public async Task<FilterItems> 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<List<string>> 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<List<FilterProjectItem>> 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<List<FilterLanguageCodeItem>> 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<List<FilterVersionItem>> 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));
}
}
}

65
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<FilterItems> GetFilterItemsAsync(CancellationToken cancellationToken = default)
public async Task<FilterItems> 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<List<string>> GetFormats(CancellationToken cancellationToken)
{
return await (await GetMongoQueryableAsync(cancellationToken)).Select(x => x.Format).Distinct().ToListAsync(cancellationToken);
}
private async Task<List<FilterProjectItem>> GetFilterProjectItems(CancellationToken cancellationToken)
{
return await (await GetMongoQueryableAsync<Project>(cancellationToken))
.Select(x=>new FilterProjectItem
{
Id = x.Id,
Name = x.Name
})
.OrderBy(x=>x.Name)
.ToListAsync(GetCancellationToken(cancellationToken));
}
private async Task<List<FilterLanguageCodeItem>> 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<List<FilterVersionItem>> 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<IMongoQueryable<DocumentWithoutContent>> 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)
{

Loading…
Cancel
Save