Application web de suivi de lecture construite avec Next.js (App Router), Prisma et PostgreSQL.
- Authentification
- NextAuth v5 (Credentials email/password)
- Persistance via Prisma Adapter
- Bibliothèque personnelle
- Un catalogue
Bookpartagé (métadonnées: titre, auteurs, genres, ISBN, couverture, résumé...) - Une relation
UserBookpar utilisateur (statut, dates, note, commentaire, pages)
- Un catalogue
- Statuts de lecture
TO_READ,READING,FINISHED,ABANDONED
- API sécurisée
- Endpoints protégés par session (
auth()) - Validation des entrées via Zod
- Endpoints protégés par session (
- Node.js: voir
.nvmrc(actuellement24.11.1) - PostgreSQL: en local ou via Prisma Postgres
npm installCopier l’exemple:
cp .env.example .envPuis renseigner au minimum:
DATABASE_URLNEXTAUTH_SECRET(générer avecopenssl rand -base64 32)NEXTAUTH_URL(par défauthttp://localhost:3000)
Optionnel:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET
Deux options:
- PostgreSQL local
- Utilise un
DATABASE_URLdu type:postgresql://USER:PASSWORD@localhost:5432/books_db
- Utilise un
- Prisma Postgres (dev)
- Démarre une instance de dev:
npx prisma devnpm run db:generate
npm run db:push
npm run db:seednpm run devOuvrir http://localhost:3000.
Compte de test (seed):
- Email:
test@example.com - Password:
password123
- Next.js 16 (App Router)
- React 19
- TypeScript
- Prisma 6
- PostgreSQL
- NextAuth v5 +
@auth/prisma-adapter - Zod
- TailwindCSS v4
L’application est une Next.js App Router.
- UI / Pages:
app/*(Server Components par défaut) - API:
app/api/*/route.ts(Route Handlers) - Auth:
auth.ts(NextAuth v5) - DB:
lib/prisma.ts(singleton PrismaClient)
- Handlers NextAuth:
app/api/auth/[...nextauth]/route.ts(ré-exporteGET/POSTdepuisauth.ts) - Inscription:
app/api/auth/register/route.ts(validation Zod + hashbcryptjs) - Protection des routes:
- API: vérification de session via
auth()au début des handlers - Pages: la protection est gérée côté pages / appels API (le
middleware.tslaisse passer les requêtes)
- API: vérification de session via
- Le modèle sépare:
Book(métadonnées partagées)UserBook(données “bibliothèque” propres à l’utilisateur: statut, notes, dates, etc.)
- Les handlers API utilisent Prisma et incluent souvent
book+ (authors,genres) pour retourner des objets complets.
- Validation: Zod via
safeParse()avec erreurs détaillées (400) - Auth:
401si pas de session - Accès aux ressources: les routes
app/api/books/[id]manipulent unUserBook.id(pasBook.id) pour garantir l’isolation par utilisateur
books-in-my-mind/
app/
api/
auth/
register/route.ts
[...nextauth]/route.ts
books/
route.ts
[id]/route.ts
[id]/add-to-library/route.ts
books/
dashboard/
login/
register/
layout.tsx
page.tsx
globals.css
components/
atoms/
molecules/
organisms/
lib/
prisma.ts
actions.ts
prisma/
schema.prisma
migrations/
seed.ts
public/
types/
next-auth.d.ts
auth.ts
middleware.ts
next.config.ts
package.json
- User
- Auth + profils
- Book
- Métadonnées globales (titre, auteurs, genres, ISBN, etc.)
- Author / Genre
- Tables de référence reliées à
Book
- Tables de référence reliées à
- UserBook
- Données spécifiques utilisateur (statut, dates, note, commentaire...)
Les routes API se trouvent dans app/api/*.
| Route | Méthodes | Description |
|---|---|---|
/api/auth/register |
POST | Inscription (credentials) |
/api/auth/[...nextauth] |
GET, POST | Handlers NextAuth |
/api/books |
GET, POST | Liste + création (crée Book + UserBook) |
/api/books/[id] |
GET, PUT, DELETE | Opérations sur un UserBook (id de la relation utilisateur) |
npm run dev
npm run build
npm run start
npm run lint
npm run db:generate
npm run db:push
npm run db:migrate
npm run db:seed
npm run db:studioNote: le repo contient aussi vercel-build pour builder en CI (Prisma generate + migrate deploy + build Next).
- Variables d’environnement minimales:
DATABASE_URLNEXTAUTH_URLNEXTAUTH_SECRET
- Prisma:
- En prod, on applique les migrations via
prisma migrate deploy(déjà inclus dansnpm run vercel-build).
- En prod, on applique les migrations via
Pour un exemple de configuration, voir .env.production.example.
app/- Pages (home, login, register, dashboard, books)
- API (
app/api/...)
prisma/schema.prismaseed.ts
auth.ts- Configuration NextAuth