feat: table available_downloads découplée des jobs de détection

- Nouvelle table available_downloads (library_id, series_name) unique
  comme source de vérité pour les téléchargements disponibles
- Les jobs de détection font UPSERT (ajout/mise à jour) et DELETE
  (séries complètes ou sans résultat)
- Après import, mise à jour ciblée : retire les volumes importés des
  releases, supprime l'entrée si plus de releases
- Migration avec import des données existantes depuis detection_results
- Endpoint latest-found simplifié : une seule query sur la table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-27 12:59:57 +01:00
parent c4f2424787
commit 885ef7b5b2
5 changed files with 148 additions and 61 deletions

View File

@@ -1184,12 +1184,18 @@ export type DownloadDetectionResultDto = {
error_message: string | null;
};
export type AvailableDownloadDto = {
id: string;
series_name: string;
missing_count: number;
available_releases: AvailableReleaseDto[] | null;
updated_at: string;
};
export type LatestFoundPerLibraryDto = {
library_id: string;
library_name: string;
job_id: string;
job_date: string;
results: DownloadDetectionResultDto[];
results: AvailableDownloadDto[];
};
export async function getDownloadDetectionReport(jobId: string) {