- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD) * DEV: Clés TEST Pierre (mode test) * REC: Clés TEST Client (mode test) * PROD: Clés LIVE Client (mode live) - Ajout de la gestion des bases de données immeubles/bâtiments * Configuration buildings_database pour DEV/REC/PROD * Service BuildingService pour enrichissement des adresses - Optimisations pages et améliorations ergonomie - Mises à jour des dépendances Composer - Nettoyage des fichiers obsolètes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
213 lines
8.3 KiB
Markdown
213 lines
8.3 KiB
Markdown
# ✅ Migration Stripe "Option A" - Résumé
|
|
|
|
## 📅 Date : 3 novembre 2025
|
|
|
|
---
|
|
|
|
## 🎯 Objectif
|
|
|
|
Optimiser la création de compte Stripe Connect en **1 seule requête** côté Flutter qui crée :
|
|
1. Le compte Stripe Connect
|
|
2. La Location Terminal (pour Tap to Pay)
|
|
3. Le lien d'onboarding
|
|
|
|
---
|
|
|
|
## ✅ Modifications Flutter APPLIQUÉES
|
|
|
|
### **1. Modèle `AmicaleModel`**
|
|
- ✅ Ajout du champ `stripeLocationId` (HiveField 27)
|
|
- ✅ Ajout dans le constructeur
|
|
- ✅ Ajout dans `fromJson()`
|
|
- ✅ Ajout dans `toJson()`
|
|
- ✅ Ajout dans `copyWith()`
|
|
- ✅ Adaptateurs Hive régénérés
|
|
|
|
### **2. Service `StripeTapToPayService`**
|
|
- ✅ Récupération du `location_id` depuis `amicale.stripeLocationId`
|
|
- ✅ Validation que le `location_id` existe avant initialisation
|
|
- ✅ Suppression de la méthode `_fetchConfiguration()` (inutile)
|
|
- ✅ Plus besoin de l'endpoint `GET /api/stripe/configuration`
|
|
|
|
### **3. Service `StripeConnectService`**
|
|
- ✅ Simplification de `createStripeAccount()` : 1 seule requête
|
|
- ✅ Ajout des URLs `return_url` et `refresh_url` dans la requête
|
|
- ✅ Récupération de `location_id` et `onboarding_url` dans la réponse
|
|
- ✅ Suppression de l'appel à `/stripe/locations`
|
|
- ✅ Ajout de `locationId` dans `StripeAccountStatus`
|
|
- ✅ Conservation de `getOnboardingLink()` (marqué déprécié)
|
|
|
|
---
|
|
|
|
## ⚠️ Modifications Backend REQUISES
|
|
|
|
### **1. Base de données**
|
|
```sql
|
|
ALTER TABLE amicales
|
|
ADD COLUMN stripe_location_id VARCHAR(255) NULL
|
|
AFTER stripe_id;
|
|
```
|
|
|
|
### **2. Endpoint `POST /stripe/accounts`**
|
|
**Modifications nécessaires** :
|
|
- Accepter `return_url` et `refresh_url` dans la requête
|
|
- Créer le compte Stripe Connect
|
|
- Créer la Location Terminal
|
|
- Créer le lien d'onboarding
|
|
- Sauvegarder `stripe_id`, `stripe_location_id`, `chk_stripe` en BDD
|
|
- Retourner : `account_id`, `location_id`, `onboarding_url`, `charges_enabled`, `payouts_enabled`, `existing`
|
|
|
|
**Voir le code complet** : `docs/STRIPE-BACKEND-MIGRATION.md`
|
|
|
|
### **3. Endpoint `GET /stripe/accounts/{id}/status`**
|
|
**Modification** :
|
|
- Ajouter `location_id` dans la réponse JSON
|
|
|
|
### **4. Endpoint `POST /stripe/locations`**
|
|
**Action** : À supprimer (devenu inutile) ou garder pour compatibilité temporaire
|
|
|
|
---
|
|
|
|
## 📊 Comparaison Avant/Après
|
|
|
|
| Aspect | Avant | Après |
|
|
|--------|-------|-------|
|
|
| **Appels API Flutter → Backend** | 3 | 1 |
|
|
| **Latence totale** | ~3-5s | ~1-2s |
|
|
| **Gestion erreurs** | Complexe (try/catch multiples) | Simplifié (transaction atomique) |
|
|
| **Atomicité BDD** | ❌ Non garantie | ✅ Oui (transaction) |
|
|
| **Location ID sauvegardé** | ❌ Non | ✅ Oui |
|
|
| **Code à maintenir** | Plus complexe | Plus simple |
|
|
|
|
---
|
|
|
|
## 🔄 Flow optimisé
|
|
|
|
```
|
|
Flutter (1 appel) Backend (3 appels Stripe) Stripe API
|
|
│ │ │
|
|
│ POST /stripe/accounts │ │
|
|
│ { │ │
|
|
│ fk_entite: 123, │ │
|
|
│ return_url: "...", │ │
|
|
│ refresh_url: "..." │ │
|
|
│ } │ │
|
|
├─────────────────────────────>│ │
|
|
│ │ 1. Create Account │
|
|
│ ├──────────────────────────>│
|
|
│ │<──────────────────────────┤
|
|
│ │ account_id: acct_xxx │
|
|
│ │ │
|
|
│ │ 2. Create Location │
|
|
│ ├──────────────────────────>│
|
|
│ │<──────────────────────────┤
|
|
│ │ location_id: tml_xxx │
|
|
│ │ │
|
|
│ │ 3. Create AccountLink │
|
|
│ ├──────────────────────────>│
|
|
│ │<──────────────────────────┤
|
|
│ │ onboarding_url │
|
|
│ │ │
|
|
│ │ (Sauvegarde en BDD) │
|
|
│ │ │
|
|
│<─────────────────────────────┤ │
|
|
│ { │ │
|
|
│ account_id: acct_xxx, │ │
|
|
│ location_id: tml_xxx, │ │
|
|
│ onboarding_url: "..." │ │
|
|
│ } │ │
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Tests à effectuer
|
|
|
|
### **Backend (après implémentation)**
|
|
1. [ ] Migration SQL appliquée
|
|
2. [ ] Test avec Postman : nouvelle amicale
|
|
3. [ ] Test avec Postman : amicale existante
|
|
4. [ ] Vérification BDD : `stripe_location_id` bien sauvegardé
|
|
5. [ ] Logs vérifiés (pas d'erreurs)
|
|
|
|
### **Flutter (maintenant)**
|
|
1. [ ] Compilation OK (déjà fait ✅)
|
|
2. [ ] Test création compte depuis l'app Web admin
|
|
3. [ ] Vérification que le `location_id` est bien dans l'amicale
|
|
4. [ ] Test paiement Tap to Pay avec le `location_id`
|
|
5. [ ] Vérification que l'erreur "Erreur inattendue" n'apparaît plus
|
|
|
|
---
|
|
|
|
## 🚨 Points d'attention
|
|
|
|
### **Backend**
|
|
- Utiliser une **transaction BDD** pour garantir l'atomicité
|
|
- Bien logger chaque étape pour le debug
|
|
- Gérer le cas des comptes existants (avec/sans `location_id`)
|
|
- Tester avec des clés Stripe de test d'abord
|
|
|
|
### **Flutter**
|
|
- Le backend doit être déployé **AVANT** de tester l'app
|
|
- Si le backend n'est pas prêt, l'app retournera une erreur 400/500
|
|
- Les anciens comptes sans `location_id` devront être migrés
|
|
|
|
---
|
|
|
|
## 📚 Documentation
|
|
|
|
- **Code Backend complet** : `docs/STRIPE-BACKEND-MIGRATION.md`
|
|
- **Code Flutter modifié** : `lib/core/services/stripe_connect_service.dart`
|
|
- **Modèle modifié** : `lib/core/data/models/amicale_model.dart`
|
|
- **Service Tap to Pay** : `lib/core/services/stripe_tap_to_pay_service.dart`
|
|
|
|
---
|
|
|
|
## 🎯 Prochaines étapes
|
|
|
|
### **Étape 1 : Backend**
|
|
1. Implémenter les modifications backend
|
|
2. Tester avec Postman
|
|
3. Valider que tout fonctionne
|
|
|
|
### **Étape 2 : Migration des données existantes**
|
|
Pour les amicales qui ont déjà un `stripe_id` mais pas de `stripe_location_id` :
|
|
|
|
```sql
|
|
-- Identifier les amicales concernées
|
|
SELECT id, name, stripe_id, stripe_location_id
|
|
FROM amicales
|
|
WHERE stripe_id IS NOT NULL
|
|
AND stripe_location_id IS NULL;
|
|
```
|
|
|
|
**Option A** : Les créer manuellement via l'API Stripe
|
|
**Option B** : Ajouter un endpoint de migration `POST /stripe/migrate-locations`
|
|
|
|
### **Étape 3 : Tests complets**
|
|
1. Test création nouvelle amicale
|
|
2. Test amicale existante avec compte
|
|
3. Test Tap to Pay avec paiement CB
|
|
4. Validation que l'erreur est corrigée
|
|
|
|
---
|
|
|
|
## ✅ État actuel
|
|
|
|
| Composant | État | Commentaire |
|
|
|-----------|------|-------------|
|
|
| **AmicaleModel** | ✅ Modifié | Champ `stripeLocationId` ajouté |
|
|
| **StripeTapToPayService** | ✅ Modifié | Utilise `amicale.stripeLocationId` |
|
|
| **StripeConnectService** | ✅ Modifié | 1 seule requête optimisée |
|
|
| **Build Runner** | ✅ Exécuté | Adaptateurs Hive régénérés |
|
|
| **Compilation Flutter** | ✅ OK | Aucune erreur |
|
|
| **Backend** | ⏳ En attente | À implémenter |
|
|
| **Tests** | ⏳ En attente | Après implémentation Backend |
|
|
|
|
---
|
|
|
|
## 📞 Support
|
|
|
|
- Documentation Stripe Connect : https://stripe.com/docs/connect
|
|
- Documentation Terminal Locations : https://stripe.com/docs/terminal/fleet/locations
|
|
- Documentation AccountLinks : https://stripe.com/docs/connect/account-links
|