diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs index f82f578da5..b11548f0cf 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs @@ -134,15 +134,29 @@ namespace Volo.Docs.Admin.Projects { throw new Exception("Cannot find the project with the Id " + projectId); } - - var docs = (await _documentRepository.GetListByProjectId(project.Id)) - .Where(doc => doc.FileName != project.NavigationDocumentName && doc.FileName != project.ParametersDocumentName) - .ToList(); + await _elasticSearchService.DeleteAllByProjectIdAsync(project.Id); - - if(docs.Any()) + + var docsCount = await _documentRepository.GetCountByProjectId(projectId); + + if (docsCount == 0) + { + return; + } + + const int maxResultCount = 1000; + + var skipCount = 0; + while(skipCount < docsCount) { - await _elasticSearchService.AddOrUpdateManyAsync(docs); + var docs = await _documentRepository.GetListByProjectId(projectId, skipCount, maxResultCount); + docs = docs.Where(doc => doc.FileName != project.NavigationDocumentName && doc.FileName != project.ParametersDocumentName).ToList(); + if (!docs.Any()) + { + return; + } + await _elasticSearchService.AddOrUpdateManyAsync(docs); + skipCount += maxResultCount; } } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs index 7dc8f13147..2493906a12 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs @@ -13,6 +13,10 @@ namespace Volo.Docs.Documents Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default); + Task> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default); + + Task GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default); + Task UpdateProjectLastCachedTimeAsync(Guid projectId, DateTime cachedTime, CancellationToken cancellationToken = default); 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 1120e36d01..f72e9076b0 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 @@ -56,6 +56,17 @@ namespace Volo.Docs.Documents return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).ToListAsync(GetCancellationToken(cancellationToken)); } + public virtual async Task> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount, + CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).PageBy(skipCount, maxResultCount).ToListAsync(GetCancellationToken(cancellationToken)); + } + + public virtual async Task GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).LongCountAsync(GetCancellationToken(cancellationToken)); + } + public async Task UpdateProjectLastCachedTimeAsync(Guid projectId, DateTime cachedTime, CancellationToken cancellationToken = default) { 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 9a3750deb0..d127a46907 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 @@ -54,6 +54,21 @@ namespace Volo.Docs.Documents return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId).ToListAsync(GetCancellationToken(cancellationToken)); } + public virtual async Task> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount, + CancellationToken cancellationToken = default) + { + return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId) + .OrderBy(x => x.Name) + .Skip(skipCount) + .Take(maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public virtual async Task GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default) + { + return await (await GetMongoQueryableAsync(cancellationToken)).LongCountAsync(x => x.ProjectId == projectId, GetCancellationToken(cancellationToken)); + } + public async Task UpdateProjectLastCachedTimeAsync(Guid projectId, DateTime cachedTime, CancellationToken cancellationToken = default) {