From 7e9f4e43461c0eb02e35df0876d9a674b02b1e25 Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 3 May 2024 15:14:47 +0300 Subject: [PATCH] Fix reindex multiple index problem --- .../Admin/Projects/ProjectAdminAppService.cs | 4 ++-- .../Volo/Docs/Documents/IDocumentRepository.cs | 4 ++-- .../Docs/Documents/EFCoreDocumentRepository.cs | 18 ++++++++++++++---- .../Docs/Documents/MongoDocumentRepository.cs | 17 +++++++++++------ .../Volo/Docs/DocumentRepository_Tests.cs | 14 ++++++++++++++ 5 files changed, 43 insertions(+), 14 deletions(-) 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 b11548f0cf..838e84f9ad 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 @@ -137,7 +137,7 @@ namespace Volo.Docs.Admin.Projects await _elasticSearchService.DeleteAllByProjectIdAsync(project.Id); - var docsCount = await _documentRepository.GetCountByProjectId(projectId); + var docsCount = await _documentRepository.GetUniqueDocumentCountByProjectIdAsync(projectId); if (docsCount == 0) { @@ -149,7 +149,7 @@ namespace Volo.Docs.Admin.Projects var skipCount = 0; while(skipCount < docsCount) { - var docs = await _documentRepository.GetListByProjectId(projectId, skipCount, maxResultCount); + var docs = await _documentRepository.GetUniqueDocumentsByProjectIdPagedAsync(projectId, skipCount, maxResultCount); docs = docs.Where(doc => doc.FileName != project.NavigationDocumentName && doc.FileName != project.ParametersDocumentName).ToList(); if (!docs.Any()) { 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 2493906a12..86fb2cdc7f 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,9 +13,9 @@ namespace Volo.Docs.Documents Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default); - Task> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default); + Task> GetUniqueDocumentsByProjectIdPagedAsync(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default); - Task GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default); + Task GetUniqueDocumentCountByProjectIdAsync(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 f72e9076b0..a585545bdf 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,15 +56,25 @@ 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, + public virtual async Task> GetUniqueDocumentsByProjectIdPagedAsync(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).PageBy(skipCount, maxResultCount).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .Where(d => d.ProjectId == projectId) + .OrderBy(x => x.LastCachedTime) + .GroupBy(x => new { x.Name, x.LanguageCode, x.Version }) + .Select(group => group.First()) + .Skip(skipCount) + .Take(maxResultCount) + .ToListAsync(cancellationToken); } - public virtual async Task GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default) + public virtual async Task GetUniqueDocumentCountByProjectIdAsync(Guid projectId, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).LongCountAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .Where(d => d.ProjectId == projectId) + .GroupBy(x => new {x.FileName, x.Version, x.LanguageCode}) + .LongCountAsync(GetCancellationToken(cancellationToken)); } public async Task UpdateProjectLastCachedTimeAsync(Guid projectId, DateTime cachedTime, 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 d127a46907..c678947f5c 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,19 +54,24 @@ 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, + public virtual async Task> GetUniqueDocumentsByProjectIdPagedAsync(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId) - .OrderBy(x => x.Name) + return await (await GetMongoQueryableAsync(cancellationToken)) + .Where(d => d.ProjectId == projectId) + .OrderBy(x => x.LastCachedTime) + .GroupBy(x => new { x.Name, x.LanguageCode, x.Version }) + .Select(group => group.First()) .Skip(skipCount) .Take(maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } - public virtual async Task GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default) + public virtual async Task GetUniqueDocumentCountByProjectIdAsync(Guid projectId, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).LongCountAsync(x => x.ProjectId == projectId, GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId) + .GroupBy(x => new { x.Name, x.LanguageCode, x.Version }) + .LongCountAsync(GetCancellationToken(cancellationToken)); } public async Task UpdateProjectLastCachedTimeAsync(Guid projectId, DateTime cachedTime, diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs index 742f80fe17..1c0c63bf64 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs @@ -43,5 +43,19 @@ namespace Volo.Docs var documentsAfterClear = await DocumentRepository.GetListByProjectId(DocsTestData.ProjectId); documentsAfterClear.ForEach(d => d.LastCachedTime.ShouldBe(DateTime.MinValue)); } + + [Fact] + public async Task GetUniqueDocumentsByProjectIdPagedAsync() + { + var documents = await DocumentRepository.GetUniqueDocumentsByProjectIdPagedAsync(DocsTestData.ProjectId, 0, 10); + documents.Count.ShouldBe(1); + } + + [Fact] + public async Task GetUniqueDocumentCountByProjectIdAsync() + { + var count = await DocumentRepository.GetUniqueDocumentCountByProjectIdAsync(DocsTestData.ProjectId); + count.ShouldBe(1); + } } }