veza/docs/archive/V0_602_RELEASE_SCOPE.md
senke 83ed4f315b
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
chore(release): v0.602 — Payout, Dette Technique & Tests E2E
- Stripe Connect: onboarding, balance, SellerDashboardView
- Interceptors: auth.ts, error.ts extracted, facade
- Grafana: dashboards enriched (p50, top endpoints, 4xx, WS, commerce)
- E2E commerce: product->order->review->invoice
- SMOKE_TEST_V0602, RETROSPECTIVE_V0602, PAYOUT_MANUAL
- Archive V0_602 scope, V0_603 placeholder, SCOPE_CONTROL v0.603
- Fix sanitizer regex (Go no backreferences)
- Marketplace test schema: product_licenses, product_images, orders, licenses
2026-02-23 22:32:01 +01:00

153 lines
6.9 KiB
Markdown

# V0.602 Release Scope — Payout, Dette Technique & Tests E2E
**Statut** : Livré (taguée v0.602)
**Phase** : 6+
**Prérequis** : v0.601 (taguée)
**Date cible** : TBD
**Estimation** : ~5 sprints (25 jours ouvrés)
**Précédente** : [v0.601](V0_601_RELEASE_SCOPE.md)
---
## 1. Objectif
Finaliser la boucle commerce avec le **payout vendeurs** (Stripe Connect), réduire la dette technique restante (split interceptors auth/error), consolider les dashboards Grafana avec métriques réelles, et valider le flux commerce par des **tests E2E**. Optionnel : migration React 19 si faisable sans risque.
---
## 2. État actuel (post-v0.601)
| Composant | État | Détail |
|-----------|------|--------|
| **Payout** | ❌ Non implémenté | Stripe Connect reporté depuis v0.601 |
| **Interceptors** | ⚠️ Partiel | auth.ts et error.ts non extraits ; error handler ~600 LOC dans interceptors.ts |
| **Grafana** | ⚠️ Placeholders | Dashboards créés mais métriques réelles à connecter |
| **Tests E2E commerce** | ❌ Absent | Pas de flow upload → achat → review → facture → remboursement |
| **React** | 18.x | Migration React 19 optionnelle |
---
## 3. Lots
### Lot P3 — Payout vendeurs (Stripe Connect)
**Objectif** : Permettre aux vendeurs de recevoir les revenus des ventes.
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| P3-01 | Config Stripe Connect — client_id, secret, webhook secret | `internal/config/config.go`, `.env.example` | S |
| P3-02 | Migration seller_stripe_accounts — lien user ↔ Stripe account | `migrations/114_seller_stripe_accounts.sql` | S |
| P3-03 | POST /sell/connect/onboard — redirect Stripe Express onboarding | `internal/handlers/sell_handler.go`, routes | M |
| P3-04 | GET /sell/balance — balance disponible, en attente (depuis Stripe ou table) | `internal/services/sell_service.go`, handlers | M |
| P3-05 | Transfert après vente — webhook ou post-order : transfer vers compte Connect | `internal/services/hyperswitch/`, webhooks | M |
| P3-06 | SellerDashboardView — carte balance, bouton « Configurer les paiements » | `apps/web/src/features/seller/`, `marketplaceService.ts` | M |
| P3-07 | MSW + Stories — handlers balance, onboarding | `apps/web/src/mocks/`, stories | S |
### Lot CLN2 — Dette technique (split interceptors)
**Objectif** : Finaliser le découpage des interceptors (auth, error) identifié en rétro v0.601.
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| CLN2-01 | Extraire auth interceptor — token refresh, queue, processQueue | `interceptors/auth.ts`, `interceptors.ts` | M |
| CLN2-02 | Extraire error interceptor — gestion erreurs, retry, toast, parseApiError | `interceptors/error.ts`, `interceptors.ts` | M |
| CLN2-03 | Réduire interceptors.ts à facade — composition des 5 modules | `interceptors.ts`, `interceptors/index.ts` | S |
| CLN2-04 | Validation — chaque fichier < 400 LOC, tests passent | | S |
### Lot INF2 — Dashboards Grafana (métriques réelles)
**Objectif** : Connecter les dashboards aux métriques Prometheus réelles du backend.
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| INF2-01 | API dashboard panels request_rate, latency p50/p95, error_rate, top endpoints | `config/grafana/dashboards/api-overview.json` | M |
| INF2-02 | Chat dashboard connexions WS actives, messages/s, présence | `config/grafana/dashboards/chat-overview.json` | S |
| INF2-03 | Commerce dashboard orders/min, checkout success, refunds, promo usage | `config/grafana/dashboards/commerce-overview.json` | S |
| INF2-04 | Vérifier exposition métriques backend middleware Prometheus, labels | `veza-backend-api/internal/middleware/` | S |
### Lot QA2 — Tests E2E commerce
**Objectif** : Valider le flux commerce complet de bout en bout.
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| QA2-01 | E2E commerce upload produit achat review facture remboursement (optionnel) | `veza-backend-api/internal/integration/` ou Playwright | M |
| QA2-02 | Smoke test v0.602 checklist 30+ features E2E incluant payout | `docs/SMOKE_TEST_V0602.md` | S |
| QA2-03 | Mise à jour PROJECT_STATE, FEATURE_STATUS, CHANGELOG | `docs/` | S |
| QA2-04 | Archiver V0_602_RELEASE_SCOPE, placeholder V0_603, rétrospective, tag | `docs/archive/`, Git | S |
### Lot OPT — Optionnel (si temps disponible)
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| OPT-01 | Migration React 19 upgrade, vérifier compatibilité | `apps/web/package.json`, tests | M |
---
## 4. Hors scope v0.602
| Élément | Version cible |
|---------|---------------|
| Go Live (streaming vidéo) | v0.703 |
| 2FA SMS / Passkeys | v0.104 |
| IaC (Terraform/Pulumi) | v0.801 |
| Payout manuel (sans Stripe Connect) | v0.603 si P3 trop complexe |
---
## 5. Fichiers impactés (récapitulatif)
### Backend Go (nouveau)
| Fichier | Action |
|---------|--------|
| `migrations/114_seller_stripe_accounts.sql` | Nouveau lien vendeur Stripe |
| `internal/services/stripe_connect_service.go` | Nouveau onboarding, balance, transferts |
### Backend Go (modifier)
| Fichier | Action |
|---------|--------|
| `internal/config/config.go` | Stripe Connect config |
| `internal/handlers/sell_handler.go` | Onboard, balance |
| `internal/services/hyperswitch/` | Transfer après vente |
| `internal/middleware/` | Métriques Prometheus (si manquantes) |
### Frontend (nouveau/modifier)
| Fichier | Action |
|---------|--------|
| `apps/web/src/services/api/interceptors/auth.ts` | Nouveau extrait |
| `apps/web/src/services/api/interceptors/error.ts` | Nouveau extrait |
| `apps/web/src/services/api/interceptors.ts` | Réduire à facade |
| `apps/web/src/features/seller/SellerDashboardView.tsx` | Balance, bouton onboarding |
| `apps/web/src/mocks/` | Handlers payout |
### Infra
| Fichier | Action |
|---------|--------|
| `config/grafana/dashboards/*.json` | Panels métriques réelles |
---
## 6. Critères d'acceptation globaux
- [x] Payout : vendeur peut s'onboarder Stripe Connect, voir sa balance
- [x] Transfert après vente documenté (PAYOUT_MANUAL.md pour v0.603)
- [x] interceptors : auth.ts et error.ts extraits, chaque fichier < 400 LOC
- [x] Dashboards Grafana alimentés par métriques réelles
- [x] Tests E2E commerce : flow product order review invoice
- [x] Smoke test v0.602 documenté
- [x] Tag v0.602 créé
---
## 7. Risques
| Risque | Mitigation |
|--------|------------|
| Stripe Connect complexité / quotas | MVP = balance affichée sans transfert auto ; documenter limites |
| Hyperswitch vs Stripe Connect | Vérifier compatibilité ; Hyperswitch peut avoir Connect-like |
| Métriques backend non exposées | Audit middleware Prometheus, ajouter si manquant |
| React 19 breaking changes | Lot optionnel ; reporter si régression |