From 9415c6028790f92932fc171b8c0d8fa4d9f7e85d Mon Sep 17 00:00:00 2001 From: Timerix Date: Fri, 23 May 2025 01:21:20 +0500 Subject: [PATCH] invalid data deletion fix --- .../Database/DatabaseConnector.cs | 35 ++++++++++--------- TODO.md | 1 + 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/ParadoxSaveParser.WebAPI/Database/DatabaseConnector.cs b/ParadoxSaveParser.WebAPI/Database/DatabaseConnector.cs index 515ff74..94643f4 100644 --- a/ParadoxSaveParser.WebAPI/Database/DatabaseConnector.cs +++ b/ParadoxSaveParser.WebAPI/Database/DatabaseConnector.cs @@ -51,15 +51,15 @@ public class DatabaseConnector { meta.errorMessage = errorMessage; await UpdateMetadataStatus(meta, SaveFileProcessingStatus.Error); - DeleteAssociatedFiles(meta); + TryDeleteAssociatedFiles(meta); } - public async Task DeleteMetadata(SaveFileMetadata meta) + public async Task DeleteMetadata(SaveFileMetadata meta, string reason) { - _logger.LogDebug($"Deleting save file (id: {meta.id} status: {meta.status} " + + _logger.LogDebug($"Deleting save file (id: {meta.id} reason: {reason}" + $"uploadDate: {meta.uploadDateTime:yyyy/MM/dd})"); await _db.DeleteAsync(meta); - DeleteAssociatedFiles(meta); + TryDeleteAssociatedFiles(meta); } /// @@ -71,20 +71,21 @@ public class DatabaseConnector var expirationDate = DateTime.Now.AddDays(-_uploadsLifetimeDays); var metadataTable = _db.Table(); - int rowCount = await metadataTable.CountAsync(); - int i = 0; + var metadataList = await metadataTable.ToListAsync(); int deleteCount = 0; - while(i < rowCount) + foreach (var meta in metadataList) { - var meta = await metadataTable.ElementAtAsync(i)!; - if(meta.status != SaveFileProcessingStatus.Done || - meta.uploadDateTime < expirationDate || - !meta.AssociatedFilesExist()) - { - deleteCount++; - await DeleteMetadata(meta); - } - i++; + string deletionReason; + if(meta.status != SaveFileProcessingStatus.Done) + deletionReason = $"invalid status ({meta.status})"; + else if (meta.uploadDateTime < expirationDate) + deletionReason = "expired"; + else if(!meta.AssociatedFilesExist()) + deletionReason = "files not found"; + else continue; + + deleteCount++; + await DeleteMetadata(meta, deletionReason); } _logger.LogInfo($"Deleted {deleteCount} invalid records"); @@ -97,7 +98,7 @@ public class DatabaseConnector File.Delete(file); } - private void DeleteAssociatedFiles(SaveFileMetadata meta) + private void TryDeleteAssociatedFiles(SaveFileMetadata meta) { TryDeleteFile(meta.GetSaveFilePath()); TryDeleteFile(meta.GetParsedDataPath()); diff --git a/TODO.md b/TODO.md index e65a029..7622dde 100644 --- a/TODO.md +++ b/TODO.md @@ -1,3 +1,4 @@ ## WebAPI.SaveParsingOperation: Save parsed data in protobuf Re-parse if saved data was parsed with another query + Implement automatic database cleanup \ No newline at end of file