# Story 4.1: Configurer Better Auth pour authentification

Status: review

## Acceptance Criteria

**Given** Better Auth est installé
**When** je configure Better Auth dans Next.js
**Then** la configuration est créée avec support JWT stateless
**And** les routes d'authentification sont configurées (/api/auth/login, /api/auth/register)
**And** les cookies sécurisés sont configurés (HttpOnly, Secure, SameSite)
**And** la connexion à la base de données est établie

**Given** Better Auth est configuré
**When** je teste l'inscription
**Then** un nouvel utilisateur peut s'inscrire avec email et mot de passe
**And** le mot de passe est hashé avec bcrypt
**And** l'utilisateur est créé dans la base de données

## Tasks / Subtasks

- [x] Installer Better Auth (AC: #1)
  - [x] Installer `better-auth`
  - [x] Créer la configuration Better Auth dans `src/lib/auth.ts`
  - [x] Configurer JWT stateless
  - [x] Configurer les cookies sécurisés
  - [x] Vérifier l'installation

- [x] Créer les routes d'authentification (AC: #1)
  - [x] Créer `/api/auth/register`
  - [x] Créer `/api/auth/login`
  - [x] Créer `/api/auth/logout`
  - [x] Créer `/api/auth/me` (profil utilisateur)
  - [x] Configurer les handlers Better Auth

- [x] Créer le schéma utilisateur (AC: #1, #2)
  - [x] Créer la table `users` dans Drizzle
  - [x] Ajouter colonnes: email, password_hash, is_premium
  - [x] Générer et appliquer les migrations
  - [x] Configurer Better Auth avec le schéma utilisateur

- [x] Tester l'inscription (AC: #2)
  - [x] Créer un endpoint de test POST `/api/auth/register`
  - [x] Envoyer des données utilisateur valides
  - [x] Vérifier que l'utilisateur est créé dans la base de données
  - [x] Vérifier que le mot de passe est hashé
  - [x] Tester l'inscription avec email déjà utilisé

- [x] Tester la connexion (AC: #1)
  - [x] Créer un endpoint de test POST `/api/auth/login`
  - [x] Envoyer email et mot de passe valides
  - [x] Vérifier que le JWT est généré
  - [x] Vérifier que les cookies sécurisés sont définis
  - [x] Tester avec des identifiants invalides

## Dev Notes

### Stack Technique
- **Auth:** Better Auth v1.4.4
- **JWT:** Stateless
- **Cookies:** HttpOnly, Secure, SameSite

### File Structure
```
src/
├── lib/
│   └── auth.ts
├── db/
│   └── schema.ts (users table)
└── app/
    └── api/
        └── auth/
            ├── register/route.ts
            ├── login/route.ts
            └── logout/route.ts
```

### References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-4.1]

## Dev Agent Record

### Agent Model Used
GLM-4.7

### Completion Notes List
- Better Auth v1.4.14 installé et configuré avec succès
- Configuration JWT stateless implémentée avec cookies sécurisés (HttpOnly, Secure, SameSite)
- Schéma utilisateur mis à jour avec colonne password_hash dans Drizzle
- Migration générée et appliquée (0002_parched_zarda.sql)
- Quatre routes API créées: /api/auth/register, /api/auth/login, /api/auth/logout, /api/auth/me
- Tests d'intégration complets créés avec Vitest (13 tests, tous passants)
- Hashage des mots de passe avec bcryptjs implémenté
- Validation des données d'entrée et gestion des erreurs robuste
- Format de réponse API standardisé ({data, meta} ou {error, meta})

### Implementation Plan
1. Installation des dépendances: better-auth, bcryptjs, @types/bcryptjs
2. Configuration de Better Auth dans src/lib/auth.ts avec adaptateur Drizzle
3. Mise à jour du schéma utilisateur pour ajouter password_hash
4. Génération et application des migrations Drizzle
5. Création des routes d'authentification avec validation
6. Tests d'intégration complets couvrant tous les scénarios

### File List
- `src/lib/auth.ts` - Configuration Better Auth
- `src/app/api/auth/register/route.ts` - Route d'inscription
- `src/app/api/auth/login/route.ts` - Route de connexion
- `src/app/api/auth/logout/route.ts` - Route de déconnexion
- `src/app/api/auth/me/route.ts` - Route profil utilisateur
- `src/db/schema.ts` - Schéma mis à jour avec password_hash
- `src/tests/auth.test.ts` - Tests d'intégration (13 tests)
- `src/tests/setup.ts` - Configuration des tests
- `vitest.config.ts` - Configuration Vitest
- `package.json` - Scripts de test ajoutés
- `drizzle/migrations/0002_parched_zarda.sql` - Migration ajoutée

## Change Log
- 2026-01-17: Implémentation complète de l'authentification avec Better Auth, bcryptjs, et tests
