fix(attachments): limpar arquivos órfãos no S3 em deleções e reset

Três caminhos de deleção não chamavam o cleanup de storage, deixando
arquivos órfãos no S3:

- deleteTransactionBulkAction: deleções por escopo de série (período,
  futuras, todas) agora coletam attachments vinculados antes do delete
  e disparam cleanupAttachmentsAfterTransactionDelete
- deleteMultipleTransactionsAction: mesma correção para seleção
  múltipla de lançamentos
- resetUserAppData: reset de conta em Ajustes coleta os fileKeys
  antes de truncar e remove os objetos do S3 em paralelo

Também ajusta deleteS3Object para ignorar NoSuchKey silenciosamente,
necessário para providers S3-compatíveis como Cloudflare R2 que não
são idempotentes nessa operação.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-04-25 14:45:45 +00:00
parent b14f487824
commit 7f05d2a681
3 changed files with 91 additions and 58 deletions

View File

@@ -48,5 +48,16 @@ export async function deleteS3Object(fileKey: string): Promise<void> {
Bucket: S3_BUCKET,
Key: fileKey,
});
await s3.send(command);
try {
await s3.send(command);
} catch (err) {
if (
err instanceof Error &&
"Code" in err &&
(err as { Code: string }).Code === "NoSuchKey"
) {
return;
}
throw err;
}
}