feat: conversion CBR → CBZ via job asynchrone
Ajoute la possibilité de convertir un livre CBR en CBZ depuis le backoffice. La conversion est sécurisée : le CBR original n'est supprimé qu'après vérification du CBZ généré et mise à jour de la base de données. - parsers: nouvelle fn `convert_cbr_to_cbz` (unar extract → zip pack → vérification → rename atomique) - api: `POST /books/:id/convert` crée un job `cbr_to_cbz` (vérifie format CBR, détecte collision) - indexer: nouveau `converter.rs` dispatché depuis `job.rs` - backoffice: bouton "Convert to CBZ" sur la page détail (visible si CBR), label dans JobRow - migrations: colonne `book_id` sur `index_jobs` + type `cbr_to_cbz` dans le check constraint Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2
infra/migrations/0013_add_book_id_to_index_jobs.sql
Normal file
2
infra/migrations/0013_add_book_id_to_index_jobs.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE index_jobs
|
||||
ADD COLUMN book_id UUID NULL REFERENCES books(id) ON DELETE SET NULL;
|
||||
4
infra/migrations/0014_add_cbr_to_cbz_job_type.sql
Normal file
4
infra/migrations/0014_add_cbr_to_cbz_job_type.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE index_jobs
|
||||
DROP CONSTRAINT IF EXISTS index_jobs_type_check,
|
||||
ADD CONSTRAINT index_jobs_type_check
|
||||
CHECK (type IN ('scan', 'rebuild', 'full_rebuild', 'thumbnail_rebuild', 'thumbnail_regenerate', 'cbr_to_cbz'));
|
||||
Reference in New Issue
Block a user