Browse Source

Fix reindex multiple index problem

pull/19701/head
Salih 2 years ago
parent
commit
7e9f4e4346
  1. 4
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs
  2. 4
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs
  3. 18
      modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs
  4. 17
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs
  5. 14
      modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs

4
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())
{

4
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs

@ -13,9 +13,9 @@ namespace Volo.Docs.Documents
Task<List<Document>> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default);
Task<List<Document>> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default);
Task<List<Document>> GetUniqueDocumentsByProjectIdPagedAsync(Guid projectId, int skipCount, int maxResultCount, CancellationToken cancellationToken = default);
Task<long> GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default);
Task<long> GetUniqueDocumentCountByProjectIdAsync(Guid projectId, CancellationToken cancellationToken = default);
Task UpdateProjectLastCachedTimeAsync(Guid projectId, DateTime cachedTime,
CancellationToken cancellationToken = default);

18
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<List<Document>> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount,
public virtual async Task<List<Document>> 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<long> GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default)
public virtual async Task<long> 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,

17
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<List<Document>> GetListByProjectId(Guid projectId, int skipCount, int maxResultCount,
public virtual async Task<List<Document>> 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<long> GetCountByProjectId(Guid projectId, CancellationToken cancellationToken = default)
public virtual async Task<long> 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,

14
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);
}
}
}

Loading…
Cancel
Save