- API : nouvelle table book_reading_progress (migration 0016) et module reading_progress.rs avec GET/PATCH /books/:id/progress (token read) - API : GET /books/:id enrichi avec reading_status, reading_current_page, reading_last_read_at via LEFT JOIN - Backoffice : badge de statut (Non lu / En cours · p.N / Lu) sur la page de détail et overlay sur les BookCards - OpenSpec : change reading-progress avec proposal/design/specs/tasks Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
1. Migration DB
- 1.1 Créer
infra/migrations/0016_add_reading_progress.sqlavec la tablebook_reading_progress(book_id PK, status TEXT CHECK, current_page INT nullable, last_read_at TIMESTAMPTZ nullable, updated_at TIMESTAMPTZ) - 1.2 Ajouter un index sur
book_reading_progress(status)pour faciliter les futurs filtres
2. Module reading_progress.rs
- 2.1 Créer
apps/api/src/reading_progress.rsavec les structsReadingProgressResponseetUpdateReadingProgressRequest(avec ToSchema pour Swagger) - 2.2 Implémenter le handler
get_reading_progress: vérifier que le livre existe (404 si non), LEFT JOIN surbook_reading_progress, retourner la valeur par défautunreadsi absent - 2.3 Implémenter le handler
update_reading_progress: vérifier que le livre existe (404 si non), validercurrent_page > 0sistatus = "reading"(422 sinon), upsert viaINSERT ... ON CONFLICT DO UPDATE - 2.4 Ajouter les annotations
#[utoipa::path(...)]sur les deux handlers (tag "reading-progress", params, request body, responses 200/404/422/401, security Bearer)
3. Enrichissement GET /books/:id
- 3.1 Dans
apps/api/src/books.rs, ajouter les champsreading_status,reading_current_page,reading_last_read_atà la structBookDetails(avec ToSchema) - 3.2 Modifier la requête SQL de
get_bookpour inclure unLEFT JOIN book_reading_progress brp ON brp.book_id = b.idet mapper les champs (valeur par défaut"unread"via COALESCE)
4. Routes dans main.rs
- 4.1 Déclarer le module
reading_progressdansapps/api/src/main.rs - 4.2 Ajouter
GET /books/:id/progressdansread_routes - 4.3 Ajouter
PATCH /books/:id/progressdansread_routes(accessible token read et admin)
5. Swagger / OpenAPI
- 5.1 Dans
apps/api/src/openapi.rs, enregistrerReadingProgressResponse,UpdateReadingProgressRequestdans lescomponents(schemas(...)) - 5.2 Enregistrer les paths
get_reading_progressetupdate_reading_progressdanspaths(...) - 5.3 Vérifier que
BookDetailsmis à jour est correctement reflété dans le Swagger généré