- 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>
8.3 KiB
8.3 KiB
✅ 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 :
- Le compte Stripe Connect
- La Location Terminal (pour Tap to Pay)
- 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_iddepuisamicale.stripeLocationId - ✅ Validation que le
location_idexiste 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_urletrefresh_urldans la requête - ✅ Récupération de
location_idetonboarding_urldans la réponse - ✅ Suppression de l'appel à
/stripe/locations - ✅ Ajout de
locationIddansStripeAccountStatus - ✅ Conservation de
getOnboardingLink()(marqué déprécié)
⚠️ Modifications Backend REQUISES
1. Base de données
ALTER TABLE amicales
ADD COLUMN stripe_location_id VARCHAR(255) NULL
AFTER stripe_id;
2. Endpoint POST /stripe/accounts
Modifications nécessaires :
- Accepter
return_urletrefresh_urldans 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_stripeen 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_iddans 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)
- Migration SQL appliquée
- Test avec Postman : nouvelle amicale
- Test avec Postman : amicale existante
- Vérification BDD :
stripe_location_idbien sauvegardé - Logs vérifiés (pas d'erreurs)
Flutter (maintenant)
- Compilation OK (déjà fait ✅)
- Test création compte depuis l'app Web admin
- Vérification que le
location_idest bien dans l'amicale - Test paiement Tap to Pay avec le
location_id - 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_iddevront ê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
- Implémenter les modifications backend
- Tester avec Postman
- 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 :
-- 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
- Test création nouvelle amicale
- Test amicale existante avec compte
- Test Tap to Pay avec paiement CB
- 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