feat(books): édition des métadonnées livres et séries + champ authors multi-valeurs

- Nouveaux endpoints PATCH /books/:id et PATCH /libraries/:id/series/:name pour éditer les métadonnées
- GET /libraries/:id/series/:name/metadata pour récupérer les métadonnées de série
- Ajout du champ `authors` (Vec<String>) sur les structs Book/BookDetails
- 3 migrations : table series_metadata, colonne authors sur series_metadata et books
- Composants EditBookForm et EditSeriesForm dans le backoffice
- Routes API Next.js correspondantes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 17:21:55 +01:00
parent a085924f8a
commit bc98067871
15 changed files with 1061 additions and 8 deletions

View File

@@ -0,0 +1,10 @@
CREATE TABLE series_metadata (
library_id UUID NOT NULL REFERENCES libraries(id) ON DELETE CASCADE,
name TEXT NOT NULL,
description TEXT,
publisher TEXT,
start_year INTEGER,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (library_id, name)
);

View File

@@ -0,0 +1,8 @@
ALTER TABLE series_metadata
ADD COLUMN authors TEXT[] NOT NULL DEFAULT '{}',
ADD COLUMN publishers TEXT[] NOT NULL DEFAULT '{}';
-- Migrate existing scalar publisher → publishers array
UPDATE series_metadata SET publishers = ARRAY[publisher] WHERE publisher IS NOT NULL AND publisher != '';
ALTER TABLE series_metadata DROP COLUMN publisher;

View File

@@ -0,0 +1,5 @@
ALTER TABLE books
ADD COLUMN authors TEXT[] NOT NULL DEFAULT '{}';
-- Migrate existing scalar author → authors array
UPDATE books SET authors = ARRAY[author] WHERE author IS NOT NULL AND author != '';