# Intégration Stripe pour Diabetix
## 📋 Aperçu
L'intégration Stripe permet aux utilisateurs de passer du plan FREE au plan PREMIUM (4,99 € / mois) avec gestion automatique des abonnements.
## 🏗️ Architecture
### Modèles Prisma
- **User.stripeId** : ID du client Stripe
- **Subscription** : Table pour tracker l'état de l'abonnement
- `stripeId` : ID de l'abonnement
- `status` : État (active, past_due, unpaid, canceled)
- `currentPeriodEnd` : Date d'expiration
### Routes API
#### POST `/api/stripe/create-checkout`
Crée une session de paiement Stripe
- **Auth** : Requis (proxy.ts)
- **Response** : `{ sessionId: string }`
- **Redirection** : Vers Stripe Checkout → `/dashboard?checkout=success`
#### POST `/api/stripe/webhook`
Reçoit les webhooks Stripe (non protégé)
- **Événements gérés** :
- `customer.subscription.created` : Nouvel abonnement → plan PREMIUM
- `customer.subscription.updated` : Mise Ă jour
- `customer.subscription.deleted` : Annulation → plan FREE
- `invoice.payment_failed` : Paiement échoué
### Composants
#### ``
Bouton pour initier le paiement (client-side)
- Charge Stripe.js via CDN
- Crée une session de checkout
- Redirige vers le formulaire de paiement Stripe
#### Page `/pricing`
- Affiche les deux plans (FREE et PREMIUM)
- Bouton "Commencer" pour non-connectés
- `` pour utilisateurs connectés
- Affiche le statut PREMIUM si applicable
## đź”§ Configuration
Voir `STRIPE_SETUP.md` pour les étapes détaillées.
Variables d'environnement requises :
```
NEXT_PUBLIC_STRIPE_KEY=pk_test_...
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PRICE_ID=price_...
STRIPE_WEBHOOK_SECRET=whsec_...
```
## 🔄 Flux d'achat
1. **Utilisateur accède `/pricing`**
- S'il est FREE, affiche ``
2. **Clique sur "Passer Ă Premium"**
- `UpgradeButton` appelle `POST /api/stripe/create-checkout`
- Reçoit `sessionId`
- Redirige vers Stripe Checkout
3. **Paiement sur Stripe Checkout**
- Succès : Redirige vers `/dashboard?checkout=success`
- Annulation : Redirige vers `/pricing`
4. **Webhook Stripe `customer.subscription.created`**
- Crée un `Subscription` en DB
- Met Ă jour `User.plan = "PREMIUM"`
5. **NextAuth JWT refresh**
- JWT callback lit le nouveau plan
- Prochains appels utilisent `plan: "PREMIUM"`
- ChatBot et features IA activés
## 🚀 Prochaines étapes
- [ ] Page de confirmation de paiement
- [ ] Email de bienvenue Premium
- [ ] Historique des factures
- [ ] Gestion du renouvellement / annulation
- [ ] Facturation annuelle
- [ ] Tests de webhook locaux avec Stripe CLI