🐛 Fix reanalysis query

This commit is contained in:
2026-01-14 23:28:25 +08:00
parent 9513a460d0
commit fa81a0bbbb

View File

@@ -47,66 +47,26 @@ public class FileReanalysisService(
private async Task<List<SnCloudFile>> GetFilesNeedingCompressionValidationAsync(int limit = 1000) private async Task<List<SnCloudFile>> GetFilesNeedingCompressionValidationAsync(int limit = 1000)
{ {
var files = await db.Files return await db.Files
.Where(f => f.ObjectId != null) .Where(f => f.ObjectId != null)
.Select(f => new SnCloudFile .Include(f => f.Object)
{ .ThenInclude(o => o!.FileReplicas)
Id = f.Id, .Where(f => f.Object!.HasCompression)
ObjectId = f.ObjectId, .Where(f => f.Object!.FileReplicas.Any(r => r.IsPrimary))
Object = new SnFileObject
{
Id = f.Object.Id,
HasCompression = f.Object.HasCompression,
FileReplicas = f.Object.FileReplicas.Where(r => r.IsPrimary).ToList()
}
})
.Where(f => f.Object != null && f.Object.HasCompression)
.Where(f => f.Object!.FileReplicas.Count > 0)
.OrderBy(f => f.Object!.Id)
.Take(limit) .Take(limit)
.ToListAsync(); .ToListAsync();
// Load objects for tracking updates
var objectIds = files.Select(f => f.ObjectId).ToList();
var objects = await db.FileObjects.Where(o => objectIds.Contains(o.Id)).ToDictionaryAsync(o => o.Id);
foreach (var file in files)
{
file.Object = objects[file.ObjectId!];
}
return files;
} }
private async Task<List<SnCloudFile>> GetFilesNeedingThumbnailValidationAsync(int limit = 1000) private async Task<List<SnCloudFile>> GetFilesNeedingThumbnailValidationAsync(int limit = 1000)
{ {
var files = await db.Files return await db.Files
.Where(f => f.ObjectId != null) .Where(f => f.ObjectId != null)
.Select(f => new SnCloudFile .Include(f => f.Object)
{ .ThenInclude(o => o!.FileReplicas)
Id = f.Id, .Where(f => f.Object!.HasThumbnail)
ObjectId = f.ObjectId, .Where(f => f.Object!.FileReplicas.Any(r => r.IsPrimary))
Object = new SnFileObject
{
Id = f.Object.Id,
HasThumbnail = f.Object.HasThumbnail,
FileReplicas = f.Object.FileReplicas.Where(r => r.IsPrimary).ToList()
}
})
.Where(f => f.Object != null && f.Object.HasThumbnail)
.Where(f => f.Object!.FileReplicas.Count > 0)
.OrderBy(f => f.Object!.Id)
.Take(limit) .Take(limit)
.ToListAsync(); .ToListAsync();
// Load objects for tracking updates
var objectIds = files.Select(f => f.ObjectId).ToList();
var objects = await db.FileObjects.Where(o => objectIds.Contains(o.Id)).ToDictionaryAsync(o => o.Id);
foreach (var file in files)
{
file.Object = objects[file.ObjectId!];
}
return files;
} }
private async Task<bool> ReanalyzeFileAsync(SnCloudFile file) private async Task<bool> ReanalyzeFileAsync(SnCloudFile file)