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:
20
infra/migrations/0067_add_available_downloads.sql
Normal file
20
infra/migrations/0067_add_available_downloads.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
CREATE TABLE available_downloads (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
library_id UUID NOT NULL REFERENCES libraries(id) ON DELETE CASCADE,
|
||||
series_name TEXT NOT NULL,
|
||||
missing_count INTEGER NOT NULL DEFAULT 0,
|
||||
available_releases JSONB,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
UNIQUE(library_id, series_name)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_available_downloads_library ON available_downloads(library_id);
|
||||
|
||||
-- Migrate existing detection results into the new table
|
||||
INSERT INTO available_downloads (library_id, series_name, missing_count, available_releases, updated_at)
|
||||
SELECT DISTINCT ON (library_id, series_name)
|
||||
library_id, series_name, missing_count, available_releases, created_at
|
||||
FROM download_detection_results
|
||||
WHERE status = 'found' AND available_releases IS NOT NULL
|
||||
ORDER BY library_id, series_name, created_at DESC
|
||||
ON CONFLICT DO NOTHING;
|
||||
Reference in New Issue
Block a user