Commit Graph

16 Commits

Author SHA1 Message Date
18d73a4db6 fix(api,web): enrichissement métadonnées — hints locaux et scoring des correspondances
Recherche de fiches par nom peu fiable : sans ISBN, les providers
étaient interrogés avec des titres bruts peu discriminants.

- extraction de hints locaux (titre/auteur/année/isbn du fichier et du
  nom de fichier) persistés dans books.local_metadata_json
- nouveau use-case ScoreMetadataMatch : tri des résultats par score de
  correspondance avant sélection du meilleur candidat
- providers (google-books, open-library, bnf, local) durcis et nourris
  par les hints ; colonne + index local_metadata_json avec migrations
  idempotentes (création et rebuild legacy)
- web : nettoyage de la description de la fiche livre
  (cleanBookDescription, white-space pre-line)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 18:07:29 +02:00
5de46a6f6d fix(web,api): lecteur — worker pdf.js dédié, shell commun et préférences par livre
Régression worker PDF : le worker pdf.js est désormais instancié une
seule fois via un port dédié (?worker&url) et reconfiguré à chaque
montage, au lieu d'un workerSrc recalculé qui cassait le rendu.

- ReaderShell : chrome commun aux lecteurs (toolbar, zones de tap,
  statut) et contrat ReaderControls pour EPUB/PDF/CBZ
- préférences de lecture par livre (mode horizontal/vertical, fit) :
  table reader_preferences + migrations idempotentes, module API,
  DTO partagés, client web avec fallback localStorage hors-ligne

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 18:06:22 +02:00
f3c6da2889 feat(api): digest de scan avec fichiers incomplets en cas d'échec
Un fichier dont l'ingestion échoue est enregistré en entrée incomplète
(métadonnées minimales) plutôt que d'interrompre le scan; le digest du
job liste les échecs avec exemples tronqués.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
c26169bcf2 feat(api): streaming des fichiers livres avec support Range
Réponses 206 partielles avec Content-Range/Accept-Ranges pour la
lecture PDF, types MIME explicites par format, en-tête
Content-Disposition UTF-8 et nosniff.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
2f98c48259 fix(api): robustesse des providers de métadonnées
Recherche ISBN directe sur Open Library avec repli titre/auteur,
normalisation des réponses, timeouts et User-Agent explicites sur les
trois providers distants, abandon de l'extraction de jaquette CBR en
échec silencieux (fallback métadonnées seules), tests des providers et
garde du test de migration si better-sqlite3 est indisponible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
7b72cc0d83 fix(api): chemins de bibliothèques — validation dédiée, alias et unicité
Validation des chemins externalisée (library-path) avec codes d'erreur
explicites, support d'alias LIBRARY_PATH_ALIASES pour traduire un chemin
hôte vers le montage conteneur, rejet des doublons de chemin entre
bibliothèques, documentation README/.env.example et docker-compose
paramétrable via READABOOK_LIBRARY_HOST_PATH.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
0fa2f99289 fix(api): migrations idempotentes pour bases existantes (metadata/automation)
Les colonnes metadata_source_config et automation_settings sont
désormais ajoutées par ALTER TABLE conditionnels sur les bases déjà
initialisées, l'index books_isbn13_idx est créé via le chemin de
migration, et un test couvre la base de données existante.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 13:11:06 +02:00
48e9459cf3 feat(api,shared): métadonnées multi-providers et automatisation des scans/enrichissements
Chaîne de résolution metadata (local, Open Library, Google Books, BNF)
avec activation/priorité/clé API par provider, colonnes isbn13 et
identifiers sur les livres, et intégration au scanner pour compléter
métadonnées et jaquettes manquantes. Module automation: réglages
persistés, planifications scan/enrichissement et déclenchement manuel,
exposés via des endpoints admin.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 13:10:45 +02:00
369fbb0e07 feat(api,web): support CBR — extraction RAR, scan et lecture d'albums
- api: cbr utilitaire (extraction RAR), scanner/métadonnées (+ tests), books, schéma
- web: ReaderPage/locators (+ tests), mockData, types partagés
- deps: pnpm-lock

Refs: #17
2026-08-23 12:08:05 +02:00
e5513d81eb feat(api,web): support CBZ — scan, métadonnées, lecteur d'albums
- api: cbz utilitaire commun, scanner/métadonnées (+ tests), books, schéma et migrations
- web: CbzReader, ReaderPage/locators (+ tests), types et client API
- shared: types formats

Refs: #16
2026-08-23 11:52:40 +02:00
4b7d4d45ce merge: feat/14-auth-first-run dans develop (auth + first-run) 2026-08-23 11:13:09 +02:00
0af88a63ca fix(api,web): corrections auth — gestion d'erreur login, messages explicites
- web: auth/errors (+ tests), LoginPage, client API
- api: auth controller/service

Refs: #14
2026-08-23 11:10:08 +02:00
8f7555cfe4 feat(api,web): auth et first-run — bootstrap admin, login, session, gardes
- api: auth controller/service, config env
- web: App/LoginPage/ProfilePage, garde d'auth, client API, styles
- shared: types/contrats auth
- compose: variables d'environnement first-run

Refs: #14
2026-08-23 11:01:00 +02:00
85b56ef3b2 fix(web,api): UI fiche livre et lecteur — progression, locators EPUB/PDF, styles
- web: BookPage/ReaderPage enrichis, sauvegarde de progression lecteur
- web: locators EPUB/PDF normalisés (+ tests), EpubReader/PdfReader ajustés
- web: nginx et service worker ajustés
- api: progress — corrections contrôleur/service

Refs: #13
2026-08-23 10:32:44 +02:00
e94524f119 fix(web,api): débloquer la boucle de chargement 'Inventaire en cours' (Recherche/Admin)
- web: gestion d'erreur et d'état vide sur SearchPage/AdminPage
- web: client API — traitement des réponses sans contenu/erreurs réseau
- api: jobs.service — éviter le statut de scan perpétuellement en cours
- tests: client.test.ts

Refs: #12 (QA non-GREEN faute d'exécution, pas d'échec réel)
2026-08-23 10:01:54 +02:00
8f1140127f chore: initial commit — monorepo ReadaBook (API NestJS, web PWA, Docker) 2026-08-23 09:56:53 +02:00