docs: update documentation for v0.803 release

This commit is contained in:
senke 2026-02-25 20:04:37 +01:00
parent 62e3e96884
commit 5063c95a5c
6 changed files with 176 additions and 167 deletions

View file

@ -1,5 +1,27 @@
# Changelog - Veza # Changelog - Veza
## [v0.803] - 2026-02-25
### Added
- Audit middleware: auto-log POST/PUT/DELETE to AuditService (skip /health, /metrics, /swagger)
- CCPA compliance: Sec-GPC header support, POST /users/me/privacy/opt-out
- Account deletion hardening: anonymization (deleted-{uuid}), S3 cleanup, session revocation, audit log
- Moderation queue: migration reports, model, service, handler; GET /admin/reports, POST /admin/reports/:id/resolve, POST /reports (user report)
- Maintenance mode: middleware 503 when enabled, PUT/GET /admin/maintenance (admin toggle)
- Announcements: migration, model, service, handler; GET /announcements/active (public), GET/POST/DELETE /admin/announcements
- Feature flags: migration, model, service, handler; GET /admin/feature-flags, PUT /admin/feature-flags/:name
- Frontend: AdminSettingsView connected to maintenance, announcements, feature flags; AdminModerationView to real reports API
- AnnouncementBanner: global banner fetching GET /announcements/active, integrated in DashboardLayout
- MSW handlers: reports, announcements, feature flags, maintenance
- Swagger annotations: privacy opt-out, account deletion
- Unit tests: CCPA, reports, announcements, feature flags handlers
### Changed
- AdminSettingsView: local state replaced by API calls for maintenance, feature flags, announcements
- AdminModerationView: mock replaced by GET /admin/reports, resolve via POST
---
## [v0.802] - 2026-02-25 ## [v0.802] - 2026-02-25
### Added ### Added
@ -16,7 +38,8 @@
- Frontend: CloudFileVersions, CloudShareModal, Versions/Share buttons in CloudFileList - Frontend: CloudFileVersions, CloudShareModal, Versions/Share buttons in CloudFileList
- Frontend: GearDetailModal tabs (Documents, Repairs), warranty badge - Frontend: GearDetailModal tabs (Documents, Repairs), warranty badge
- MSW handlers: cloud versions/share, gear documents/repairs, tags suggest - MSW handlers: cloud versions/share, gear documents/repairs, tags suggest
- Storybook: CloudFileVersions, CloudShareModal, GearDetailModalWithDocuments/WithRepairs/WarrantyExpiring - Backend unit tests: TagSuggestService, GearWarrantyNotifier
- Storybook: CloudFileVersions (WithVersions, Empty, Loading), CloudShareModal, GearDetailModal (WithDocuments, WithRepairs, WarrantyExpiring), GearCard (WarrantyExpiringSoon)
### Changed ### Changed
- gear_document_service: sanitizeGearFilename to avoid conflict with cloud sanitizeFilename - gear_document_service: sanitizeGearFilename to avoid conflict with cloud sanitizeFilename

View file

@ -705,6 +705,108 @@ Request GDPR data export. Returns 202 Accepted; export runs asynchronously. User
--- ---
## Security & Compliance (v0.803)
### Audit Middleware
All POST, PUT, DELETE requests are automatically logged to the audit service (user, action, resource, IP). Skipped paths: `/health`, `/metrics`, `/swagger`, `/api/v1/admin`.
### CCPA / Sec-GPC
When the client sends `Sec-GPC: 1` (Global Privacy Control), the server sets `do_not_sell=true` in context and responds with `GPC: 1`.
### POST /users/me/privacy/opt-out
Set Do Not Sell preference (CCPA compliance).
**Auth:** Bearer token (required)
**Body:** `{ "do_not_sell": true }`
---
## Moderation (v0.803)
### GET /admin/reports
List reports (admin only). Query: `status` (pending|resolved|dismissed|all), `limit`, `offset`.
**Auth:** Bearer token + admin role
### POST /admin/reports/:id/resolve
Resolve a report. Body: `{ "action": "resolve"|"dismiss"|"ban"|"warn" }`.
**Auth:** Bearer token + admin role
### POST /reports
Create a report (authenticated user). Body: `{ "content_type": "user"|"track"|"comment", "content_id": "uuid", "reason": "..." }`.
**Auth:** Bearer token (required)
---
## Announcements (v0.803)
### GET /announcements/active
List active announcements (public). Used by AnnouncementBanner.
**Auth:** None
### GET /admin/announcements
List all announcements (admin).
**Auth:** Bearer token + admin role
### POST /admin/announcements
Create announcement. Body: `{ "title": "...", "content": "...", "type": "info"|"warning"|"error" }`.
**Auth:** Bearer token + admin role
### DELETE /admin/announcements/:id
Delete an announcement.
**Auth:** Bearer token + admin role
---
## Feature Flags (v0.803)
### GET /admin/feature-flags
List all feature flags (admin).
**Auth:** Bearer token + admin role
### PUT /admin/feature-flags/:name
Toggle a feature flag. Body: `{ "enabled": true|false }`.
**Auth:** Bearer token + admin role
---
## Maintenance Mode (v0.803)
### GET /admin/maintenance
Get current maintenance mode status.
**Auth:** Bearer token + admin role
### PUT /admin/maintenance
Enable or disable maintenance mode. Body: `{ "enabled": true|false }`. When enabled, non-admin routes return 503 except `/health`, `/api/v1/admin/*`.
**Auth:** Bearer token + admin role
---
## Legacy routes (deprecated) ## Legacy routes (deprecated)
The following routes are also available at the root (without `/api/v1` prefix) but are deprecated: The following routes are also available at the root (without `/api/v1` prefix) but are deprecated:

View file

@ -1,6 +1,6 @@
# Statut des fonctionnalités — Veza # Statut des fonctionnalités — Veza
**Dernière mise à jour** : février 2026 — v0.802 livrée (Cloud avancé, Gear documents/repairs, Tags suggest) **Dernière mise à jour** : février 2026 — v0.803 livrée (Sécurité, Compliance, Modération, Maintenance, Annonces, Feature flags)
Ce document décrit le statut réel des fonctionnalités par rapport au code. Ce document décrit le statut réel des fonctionnalités par rapport au code.
@ -19,7 +19,7 @@ Ce document décrit le statut réel des fonctionnalités par rapport au code.
| Dashboard | Oui | Oui | GET /api/v1/dashboard | | Dashboard | Oui | Oui | GET /api/v1/dashboard |
| Recherche | Oui | Oui | GET /search unifié, GET /tracks/search. v0.202 : musical_key, tri pertinence. v0.203 : pg_trgm fuzzy, AND/OR/NOT, tooltip aide | | Recherche | Oui | Oui | GET /search unifié, GET /tracks/search. v0.202 : musical_key, tri pertinence. v0.203 : pg_trgm fuzzy, AND/OR/NOT, tooltip aide |
| Social (feed, posts, groups, follows, blocks, trending) | Oui | Oui | v0.301 : feed API, explore. v0.302 : groupes avancés (request join, invite, rôles, mes groupes) | | Social (feed, posts, groups, follows, blocks, trending) | Oui | Oui | v0.301 : feed API, explore. v0.302 : groupes avancés (request join, invite, rôles, mes groupes) |
| Administration | Oui | Oui | Complet | | Administration | Oui | Oui | Complet. v0.803 : Modération (reports), Maintenance mode, Annonces, Feature flags DB |
| Marketplace | Oui | Oui | Complet (Hyperswitch). v0.603 : Transfer auto Stripe Connect. v0.701 : Retry auto failed transfers, Admin Dashboard. v0.702 : Route product detail, tests reviews/invoices/refunds | | Marketplace | Oui | Oui | Complet (Hyperswitch). v0.603 : Transfer auto Stripe Connect. v0.701 : Retry auto failed transfers, Admin Dashboard. v0.702 : Route product detail, tests reviews/invoices/refunds |
| Webhooks | Oui | Oui | Complet | | Webhooks | Oui | Oui | Complet |
| Inventory / Gear | Oui | Oui | GET/POST/PUT/DELETE /api/v1/inventory/gear. v0.802 : documents CRUD, repairs CRUD, warranty notifier | | Inventory / Gear | Oui | Oui | GET/POST/PUT/DELETE /api/v1/inventory/gear. v0.802 : documents CRUD, repairs CRUD, warranty notifier |
@ -230,6 +230,19 @@ Voir [V0_703_RELEASE_SCOPE.md](V0_703_RELEASE_SCOPE.md) pour le détail.
| G2 | Gear repairs : CRUD (repair history) | | G2 | Gear repairs : CRUD (repair history) |
| G2 | Gear warranty : warranty_start, warranty_notes, notifier 24h | | G2 | Gear warranty : warranty_start, warranty_notes, notifier 24h |
## Livré en v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev)
| Lot | Feature |
|-----|---------|
| SEC1 | Audit middleware : auto-log POST/PUT/DELETE |
| SEC2 | CCPA : Sec-GPC header, POST /users/me/privacy/opt-out |
| SEC3 | Account deletion : anonymisation, S3 cleanup, session revocation |
| ADM1 | Modération : reports CRUD, GET /admin/reports, POST /admin/reports/:id/resolve |
| ADM2 | Maintenance mode : middleware 503, PUT/GET /admin/maintenance |
| ADM3 | Annonces : CRUD, GET /announcements/active (public) |
| ADM4 | Feature flags : DB persistence, GET/PUT /admin/feature-flags |
| FE1 | AdminSettingsView, AdminModerationView, AnnouncementBanner connectés |
## Prévu en v0.403 (Phase 4 Commerce — suite) ## Prévu en v0.403 (Phase 4 Commerce — suite)
| Lot | Feature | | Lot | Feature |

View file

@ -8,10 +8,10 @@
| Élément | Valeur | | Élément | Valeur |
|---------|--------| |---------|--------|
| **Dernier tag** | v0.802 | | **Dernier tag** | v0.803 |
| **Branche courante** | `main` | | **Branche courante** | `main` |
| **Phase** | Phase 8 — Polish & Scale | | **Phase** | Phase 8 — Polish & Scale |
| **Prochaine version** | v0.803 | | **Prochaine version** | v0.901 |
--- ---
@ -73,6 +73,16 @@
- Infra : MinIO S3-compatible (dev, staging, prod), 6 migrations (103108) - Infra : MinIO S3-compatible (dev, staging, prod), 6 migrations (103108)
- Sécurité : Trivy container scanning CI - Sécurité : Trivy container scanning CI
### v0.803 (Phase 8 — Sécurité, Compliance & Outillage Dev)
- Audit middleware HTTP (POST/PUT/DELETE auto-log)
- CCPA Sec-GPC, opt-out endpoint
- Account deletion hardening (anonymisation, S3, sessions)
- Moderation queue (reports CRUD)
- Maintenance mode (503, admin toggle)
- Announcements CRUD, GET /announcements/active
- Feature flags DB persistence
- AdminSettingsView, AdminModerationView, AnnouncementBanner connectés
### v0.802 (Phase 8 — Cloud avancé, Gear, Tags) ### v0.802 (Phase 8 — Cloud avancé, Gear, Tags)
- Cloud : versioning, sharing, GDPR export, backup cron - Cloud : versioning, sharing, GDPR export, backup cron
- Gear : documents CRUD, repairs CRUD, warranty notifier - Gear : documents CRUD, repairs CRUD, warranty notifier

View file

@ -1,14 +1,14 @@
# Contrôle du scope — Anti-scope-creep # Contrôle du scope — Anti-scope-creep
**Objectif** : Éviter toute dérive de scope. Chaque modification doit être intentionnelle et traçable. **Objectif** : Éviter toute dérive de scope. Chaque modification doit être intentionnelle et traçable.
**Référence active** : [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) **Référence active** : [V0_901_RELEASE_SCOPE.md](V0_901_RELEASE_SCOPE.md)
**Version précédente** : [V0_802_RELEASE_SCOPE.md](archive/V0_802_RELEASE_SCOPE.md) **Version précédente** : [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md)
--- ---
## 1. Règle d'or ## 1. Règle d'or
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.803.** > **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.901.**
> Si non → ne pas ajouter. Créer un ticket pour une version ultérieure. > Si non → ne pas ajouter. Créer un ticket pour une version ultérieure.
--- ---
@ -17,7 +17,7 @@
### 2.1 Autorisé ### 2.1 Autorisé
- **Corrections de bugs** sur les features IN SCOPE v0.803 - **Corrections de bugs** sur les features IN SCOPE v0.901
- **Stabilisation** : tests, refactoring sans changement de comportement - **Stabilisation** : tests, refactoring sans changement de comportement
- **Nettoyage** : suppression de code mort, consolidation - **Nettoyage** : suppression de code mort, consolidation
- **Documentation** : mise à jour des docs existantes - **Documentation** : mise à jour des docs existantes
@ -26,17 +26,17 @@
### 2.2 Interdit ### 2.2 Interdit
- **Nouvelles features** hors scope v0.803 - **Nouvelles features** hors scope v0.901
- **Nouvelles routes** ou pages hors scope - **Nouvelles routes** ou pages hors scope
- **Nouvelles dépendances** (sauf correctif sécurité) - **Nouvelles dépendances** (sauf correctif sécurité)
- **Changements de comportement** sur les features HORS SCOPE - **Changements de comportement** sur les features HORS SCOPE
- **"Améliorations"** non liées à un bug identifié ou une feature IN SCOPE v0.803 - **"Améliorations"** non liées à un bug identifié ou une feature IN SCOPE v0.901
### 2.3 Cas limite ### 2.3 Cas limite
| Situation | Action | | Situation | Action |
|-----------|--------| |-----------|--------|
| Bug dans une feature HORS SCOPE | Corriger si blocant pour une feature IN SCOPE v0.803. Sinon : ticket pour plus tard. | | Bug dans une feature HORS SCOPE | Corriger si blocant pour une feature IN SCOPE v0.901. Sinon : ticket pour plus tard. |
| Dépendance obsolète/vulnérable | Mettre à jour. Documenter dans la PR. | | Dépendance obsolète/vulnérable | Mettre à jour. Documenter dans la PR. |
| Refactoring qui change une API interne | Autorisé si 0 impact sur le contrat public et tests passent. | | Refactoring qui change une API interne | Autorisé si 0 impact sur le contrat public et tests passent. |
| "Petite amélioration UX" | **Non.** Créer un ticket pour v0.803+. | | "Petite amélioration UX" | **Non.** Créer un ticket pour v0.803+. |
@ -47,13 +47,13 @@
### 3.1 Checklist pré-commit (dans la tête) ### 3.1 Checklist pré-commit (dans la tête)
1. **Mon changement modifie-t-il une feature IN SCOPE v0.803 ?** 1. **Mon changement modifie-t-il une feature IN SCOPE v0.901 ?**
- Oui → Continuer. S'assurer qu'il n'y a pas de régression. - Oui → Continuer. S'assurer qu'il n'y a pas de régression.
- Non → **STOP.** Est-ce une correction de bug ? Si oui, la feature est-elle IN SCOPE ? - Non → **STOP.** Est-ce une correction de bug ? Si oui, la feature est-elle IN SCOPE ?
2. **Mon changement ajoute-t-il du code ?** 2. **Mon changement ajoute-t-il du code ?**
- Nouvelle route, nouveau composant, nouveau service → Vérifier V0_803_RELEASE_SCOPE. Si hors scope → **STOP.** - Nouvelle route, nouveau composant, nouveau service → Vérifier V0_901_RELEASE_SCOPE. Si hors scope → **STOP.**
- Correction, refactoring, test → OK si lié à une feature IN SCOPE v0.803. - Correction, refactoring, test → OK si lié à une feature IN SCOPE v0.901.
3. **Mes tests passent-ils ?** 3. **Mes tests passent-ils ?**
- `npm test -- --run` (frontend) - `npm test -- --run` (frontend)
@ -81,7 +81,7 @@ Format : `type(scope): description`
Dans chaque PR, le relecteur doit valider : Dans chaque PR, le relecteur doit valider :
- [ ] Le changement est dans le scope v0.803 (voir [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md)) - [ ] Le changement est dans le scope v0.901 (voir [V0_901_RELEASE_SCOPE.md](V0_901_RELEASE_SCOPE.md))
- [ ] Aucune nouvelle feature ajoutée - [ ] Aucune nouvelle feature ajoutée
- [ ] Aucune régression sur les flows critiques - [ ] Aucune régression sur les flows critiques
- [ ] Les tests passent - [ ] Les tests passent
@ -92,19 +92,19 @@ Dans chaque PR, le relecteur doit valider :
Une PR sera rejetée si : Une PR sera rejetée si :
- Elle ajoute une nouvelle route, page ou feature - Elle ajoute une nouvelle route, page ou feature
- Elle modifie le comportement d'une feature HORS SCOPE v0.803 (sauf correctif bug critique) - Elle modifie le comportement d'une feature HORS SCOPE v0.901 (sauf correctif bug critique)
- Les tests échouent - Les tests échouent
- Elle introduit une dépendance non justifiée - Elle introduit une dépendance non justifiée
--- ---
## 5. Proposer une feature pour APRÈS v0.702 ## 5. Proposer une feature pour APRÈS v0.803
### 5.1 Template ### 5.1 Template
Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md) avec : Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md) avec :
- **Alignement scope** : cocher "Hors scope v0.803 — pour v0.804+" - **Alignement scope** : cocher "Hors scope v0.901 — pour v0.902+"
- **Justification** : pourquoi cette feature est nécessaire - **Justification** : pourquoi cette feature est nécessaire
- **Effort estimé** : S / M / L / XL - **Effort estimé** : S / M / L / XL
- **Dépendances** : quelles features v0.802 doivent être stables avant - **Dépendances** : quelles features v0.802 doivent être stables avant
@ -112,8 +112,8 @@ Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md
### 5.2 Workflow ### 5.2 Workflow
1. Créer une issue avec le template 1. Créer une issue avec le template
2. **Ne pas implémenter** tant que v0.803 n'est pas taguée 2. **Ne pas implémenter** tant que v0.901 n'est pas défini
3. Une fois v0.803 stable, prioriser les issues post-v0.803 dans le scope suivant 3. Une fois v0.901 défini, prioriser les issues dans le scope suivant
--- ---
@ -178,11 +178,12 @@ Pour tout cas ambigu :
- v0.703 : Phase 7 — Go Live & Streaming Complet — taguée - v0.703 : Phase 7 — Go Live & Streaming Complet — taguée
- v0.801 : Phase 8 — UX/UI Polish, Accessibilité & PWA — taguée - v0.801 : Phase 8 — UX/UI Polish, Accessibilité & PWA — taguée
- v0.802 : Phase 8 — Cloud avancé, Gear documents/repairs, Tags suggest — taguée - v0.802 : Phase 8 — Cloud avancé, Gear documents/repairs, Tags suggest — taguée
- v0.803 : Phase 8 — Sécurité, Compliance & Outillage Dev — taguée
--- ---
## 8. Rappel pour les contributeurs ## 8. Rappel pour les contributeurs
- **Cursor / IA** : Les règles dans `.cursorrules` rappellent de vérifier le scope avant toute modification. - **Cursor / IA** : Les règles dans `.cursorrules` rappellent de vérifier le scope avant toute modification.
- **Humains** : Lire [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md) avant de coder. - **Humains** : Lire [V0_901_RELEASE_SCOPE.md](V0_901_RELEASE_SCOPE.md) avant de coder.
- **En doute ?** Ouvrir une issue "Scope clarification" plutôt que de coder. - **En doute ?** Ouvrir une issue "Scope clarification" plutôt que de coder.

View file

@ -1,150 +1,10 @@
# V0.901 Release Scope — Marketplace Complet & Analytics Avancés # Scope v0.901 — À définir
**Statut** : Planifié **Statut** : Placeholder. Le scope sera défini après stabilisation de v0.803.
**Phase** : 9 (v1.0 Launch — Lot 1)
**Prérequis** : v0.803 (taguée)
**Date cible** : TBD
**Estimation** : ~3 sprints (15 jours ouvrés)
**Précédente** : [v0.803](archive/V0_803_RELEASE_SCOPE.md)
--- ---
## 1. Objectif ## Référence
Première version de la Phase 9. Complète le module **Marketplace** (wishlist, promotions/flash sales, dispute/réclamation, réponses aux reviews, re-téléchargement illimité, informations fiscales) et les **Analytics avancés** (géographie auditeurs, démographie, devices, sources de trafic, projections revenus, analytics admin). Ces fonctionnalités finalisent le volet commerce et données pour la v1.0. - Version précédente : [V0_803_RELEASE_SCOPE.md](V0_803_RELEASE_SCOPE.md)
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Anti-scope-creep
---
## 2. État actuel (post-v0.803)
| Composant | État | Détail |
|-----------|------|--------|
| **Produits & Catalogue** | ✅ Livré v0.401 | CRUD, filtres, images, previews |
| **Licences & Droits** | ✅ Livré v0.401 | Types, conditions, LicenceCard |
| **Checkout Hyperswitch** | ✅ Livré v0.402 | Production-ready, return URL |
| **Codes promo** | ✅ Livré v0.402 | Validation, OrderSummary |
| **Reviews** | ✅ Livré v0.702 | Create, List, tests unitaires |
| **Factures PDF** | ✅ Livré v0.702 | GenerateInvoice, download |
| **Remboursements** | ✅ Livré v0.702 | RefundOrder, licence revocation |
| **Seller dashboard** | ✅ Livré v0.401 | Stats, evolution chart, top products |
| **Transfer auto** | ✅ Livré v0.603 | Stripe Connect, commission plateforme |
| **Wishlist** | ❌ Absent | wishlist.go existe mais non connecté frontend |
| **Promotions / flash sales** | ❌ Absent | Pas de système de promotions dynamiques |
| **Dispute / réclamation** | ❌ Absent | Pas de flow dispute client |
| **Répondre aux reviews** | ❌ Absent | Pas de réponse vendeur aux reviews |
| **Re-téléchargement illimité** | ❌ Absent | Pas de re-download après achat |
| **Informations fiscales** | ❌ Absent | Pas de calcul taxes automatique |
| **Analytics créateur** | ✅ Livré v0.202 | Stats, charts, export CSV/JSON |
| **Géographie auditeurs** | ❌ Absent | Pas de carte géographique |
| **Démographie** | ❌ Absent | Pas de données démographiques |
| **Device analytics** | ❌ Absent | Pas de breakdown par device |
| **Admin analytics** | ❌ Absent | Pas de DAU/MAU, rétention |
---
## 3. Lots
### Lot MK1 — Marketplace Avancé
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| MK1-01 | Wishlist frontend — connecter wishlist.go existant, `WishlistView`, bouton coeur sur ProductCard, `GET /marketplace/wishlist` | Frontend + routes | M |
| MK1-02 | `POST /marketplace/wishlist/:productId`, `DELETE /marketplace/wishlist/:productId` — ajout/retrait wishlist | Backend routes | S |
| MK1-03 | Promotions — migration `126_promotions.sql` (table promotions: product_id, discount_percent, starts_at, ends_at, is_active), CRUD endpoints | Migrations, handlers | L |
| MK1-04 | Flash sales frontend — badge "PROMO -X%" sur ProductCard, countdown timer, page /marketplace/deals | Frontend | M |
| MK1-05 | Dispute / réclamation — migration `127_disputes.sql` (table disputes: order_id, buyer_id, reason, status, resolution), `POST /marketplace/orders/:id/dispute`, `GET /admin/disputes` | Migrations, handlers | L |
| MK1-06 | Réponse aux reviews — `POST /marketplace/reviews/:id/reply` (seller uniquement), affichage reply dans ProductDetailViewReviews | Backend, frontend | M |
| MK1-07 | Re-download — `GET /marketplace/orders/:id/download` retourne lien S3 temporaire pour les fichiers achetés, illimité dans le temps | Backend | M |
| MK1-08 | Taxes — config `TAX_RATE` par pays (défaut 0), calcul automatique dans checkout, affichage dans OrderSummary | Backend, frontend | M |
| MK1-09 | MSW handlers — wishlist, promotions, disputes, review reply, download | MSW | S |
| MK1-10 | Tests — wishlist CRUD, promotion validity, dispute flow, re-download auth | Tests | M |
### Lot AN1 — Creator Analytics Complet
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| AN1-01 | Géographie auditeurs — collecte IP → country (MaxMind GeoIP2-Lite), `GET /analytics/geography` | Backend | L |
| AN1-02 | Carte géographique frontend — composant carte avec heatmap par pays (bibliothèque légère, ex: react-simple-maps) | Frontend | L |
| AN1-03 | Démographie — user-agent parsing (device, OS, browser), `GET /analytics/demographics` | Backend | M |
| AN1-04 | Device analytics — breakdown desktop/mobile/tablet, chart donut | Frontend | M |
| AN1-05 | Sources de trafic — referrer tracking, `GET /analytics/traffic-sources` | Backend | M |
| AN1-06 | Revenue projections — `GET /analytics/revenue/projection` basé sur tendance 30/60/90 jours (régression linéaire simple) | Backend | M |
| AN1-07 | Comparaison périodes — `GET /analytics/compare?period1=...&period2=...` | Backend | M |
| AN1-08 | Frontend analytics dashboard enrichi — onglets Geography, Demographics, Traffic, Revenue | Frontend | L |
| AN1-09 | Tests — geography parsing, projection calculation, comparison | Tests | M |
### Lot AN2 — Admin Analytics
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| AN2-01 | DAU/MAU — `GET /admin/analytics/users` basé sur last_active_at | Backend | M |
| AN2-02 | Nouveaux inscrits — `GET /admin/analytics/signups?period=30d` | Backend | S |
| AN2-03 | Taux de rétention — calcul D1, D7, D30 retention | Backend | M |
| AN2-04 | Volume de transactions — `GET /admin/analytics/transactions` (revenus, nombre, ticket moyen) | Backend | S |
| AN2-05 | Performances infrastructure — `GET /admin/analytics/performance` (p50, p95 latency, error rate) via Prometheus API | Backend | M |
| AN2-06 | Frontend admin analytics — dashboard avec widgets DAU/MAU, signups chart, retention curve, transactions summary | Frontend | L |
| AN2-07 | Tests — DAU calculation, retention formula, transaction aggregation | Tests | M |
### Lot QA1 — Tests & Release
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| QA1-01 | Smoke test v0.901 | `docs/SMOKE_TEST_V0901.md` | S |
| QA1-02 | Mise à jour docs | `docs/` | S |
| QA1-03 | Rétrospective, archivage, placeholder v0.902, tag | `docs/`, Git | S |
---
## 4. Hors scope v0.901
| Élément | Version cible |
|---------|---------------|
| Chat enrichi (images, GIFs) | v0.902 |
| Transactional emails | v0.902 |
| Social complete (hashtags, QR) | v0.902 |
| Profiles complete (verified badge) | v0.902 |
| Search recommendations ML | v0.903 |
| PayPal support | v2.0 |
| Crypto payments | v2.0 |
| Signature électronique licences | v2.0 |
| Contrat automatique généré | v2.0 |
---
## 5. Critères d'acceptation
- [ ] Wishlist : ajout/retrait produit, page /marketplace/wishlist, coeur sur ProductCard
- [ ] Promotions : CRUD, discount appliqué au checkout, badge PROMO, countdown, page /deals
- [ ] Dispute : création par buyer, liste admin, résolution (refund/dismiss)
- [ ] Review reply : vendeur peut répondre, reply affiché sous la review
- [ ] Re-download : lien S3 temporaire illimité pour les achats
- [ ] Taxes : calcul auto par pays, affiché dans OrderSummary
- [ ] Géographie : carte heatmap des auditeurs par pays
- [ ] Démographie : breakdown device/OS/browser
- [ ] Traffic sources : referrer top 10
- [ ] Revenue projections : prévision 30/60/90j
- [ ] Admin DAU/MAU, signups, retention, transactions
- [ ] Tag v0.901 créé
---
## 6. Risques
| Risque | Mitigation |
|--------|------------|
| GeoIP database size | Utiliser MaxMind GeoIP2-Lite (gratuit, ~60MB), refresh mensuel |
| Projections revenus fausses | Disclaimer "estimation basée sur les 90 derniers jours" |
| Carte géographique lourde (SVG) | react-simple-maps avec lazy load, simplification polygones |
| Dispute flow complexe | Flow simple v1 (open → resolve), workflow avancé en v2 |
| Taxes multi-pays | Taux configurables par pays dans admin, pas de calcul auto TVA complexe |
---
## 7. Références
- [V0_803_RELEASE_SCOPE.md](archive/V0_803_RELEASE_SCOPE.md)
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md)
- `veza-backend-api/internal/core/marketplace/` (service, models, wishlist.go)
- `veza-backend-api/internal/core/analytics/`
- `apps/web/src/features/marketplace/`
- `apps/web/src/features/analytics/`