fix(cv-import): bound source retention and guard worker recovery
This commit is contained in:
@@ -66,6 +66,20 @@ public sealed class CvImportRetentionHostedService(IServiceScopeFactory scopes,
|
||||
removed++;
|
||||
}
|
||||
await db.SaveChangesAsync(token);
|
||||
var registered = (await db.CvUploadArtifacts.IgnoreQueryFilters().AsNoTracking().Select(a => a.StoragePath).ToListAsync(token))
|
||||
.Where(p => !string.IsNullOrWhiteSpace(p)).Select(Path.GetFullPath).ToHashSet(OperatingSystem.IsWindows() ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal);
|
||||
foreach (var directory in Directory.EnumerateDirectories(paths.CvArtifactsRoot).Take(1000))
|
||||
{
|
||||
if ((File.GetAttributes(directory) & FileAttributes.ReparsePoint) != 0) continue;
|
||||
foreach (var file in Directory.EnumerateFiles(directory).Take(1000))
|
||||
{
|
||||
if (registered.Contains(Path.GetFullPath(file)) || !System.Text.RegularExpressions.Regex.IsMatch(Path.GetFileName(file), @"^\d{14}-[a-f0-9]{32}\.(pdf|docx)$", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
|
||||
|| File.GetLastWriteTimeUtc(file) > now.AddDays(-7).UtcDateTime || (File.GetAttributes(file) & FileAttributes.ReparsePoint) != 0) continue;
|
||||
try { File.Delete(file); removed++; }
|
||||
catch (IOException) { }
|
||||
catch (UnauthorizedAccessException) { }
|
||||
}
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ public sealed class CvProcessingOperationHandler : IAiOperationHandler
|
||||
{
|
||||
var completedAtUtc = status == "failed" || status == "cancelled" ? DateTimeOffset.UtcNow : (DateTimeOffset?)null;
|
||||
return services.GetRequiredService<JobTrackerContext>().CvExtractionRuns
|
||||
.Where(run => run.Id == runId)
|
||||
.Where(run => run.Id == runId && run.Status != "expired" && run.Status != "applied")
|
||||
.ExecuteUpdateAsync(setters => setters
|
||||
.SetProperty(run => run.Status, status)
|
||||
.SetProperty(run => run.ErrorMessage, message)
|
||||
|
||||
@@ -475,7 +475,7 @@ public sealed class UserOperationStore(JobTrackerContext db, TimeProvider timePr
|
||||
: (DateTimeOffset?)null;
|
||||
|
||||
return db.CvExtractionRuns.IgnoreQueryFilters()
|
||||
.Where(run => run.Id == runId && run.OwnerUserId == operation.OwnerUserId)
|
||||
.Where(run => run.Id == runId && run.OwnerUserId == operation.OwnerUserId && run.Status != "expired" && run.Status != "applied")
|
||||
.ExecuteUpdateAsync(setters => setters
|
||||
.SetProperty(run => run.Status, runStatus)
|
||||
.SetProperty(run => run.ErrorMessage, message)
|
||||
|
||||
Reference in New Issue
Block a user