Files
Froidefond Julien e0b80cae38 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>
2026-03-09 23:02:08 +01:00

1.5 KiB

Why

CBR est un format RAR propriétaire qui nécessite des outils tiers non-libres (unrar) pour la lecture. CBZ est un simple ZIP — standard ouvert, mieux supporté par les lecteurs et les outils. Permettre la conversion en backoffice évite une manipulation manuelle des fichiers et garantit une bibliothèque homogène.

What Changes

  • Nouvelle fonction convert_cbr_to_cbz() dans crates/parsers
  • Nouveau endpoint API POST /books/:id/convert qui crée un job de conversion
  • Nouveau type de job cbr_to_cbz traité par l'indexer
  • Bouton "Convert to CBZ" sur la page détail d'un livre (visible uniquement si file_format == 'cbr')
  • Affichage du type cbr_to_cbz dans la liste des jobs du backoffice

Capabilities

New Capabilities

  • cbr-conversion: Conversion d'un fichier CBR en CBZ via un job asynchrone, avec suppression sécurisée du CBR uniquement après vérification du CBZ généré.

Modified Capabilities

Impact

  • crates/parsers : nouvelle fonction publique convert_cbr_to_cbz
  • apps/api : nouveau endpoint POST /books/:id/convert, nouveau type de job dans index_jobs.rs
  • apps/indexer : nouveau converter.rs, dispatch dans worker.rs
  • apps/backoffice : page détail livre + liste des jobs
  • infra/migrations : migration 0013_add_book_id_to_index_jobs.sql pour stocker la cible du job
  • Dépendances système : unar (déjà requis) + zip crate (déjà présent via CBZ)