veza/docs/V0_902_RELEASE_SCOPE.md

165 lines
9 KiB
Markdown
Raw Normal View History

# V0.902 Release Scope — Social Complet, Chat & Notifications
**Statut** : Planifié
**Phase** : 9 (v1.0 Launch — Lot 2)
**Prérequis** : v0.901 (taguée)
**Date cible** : TBD
**Estimation** : ~3 sprints (15 jours ouvrés)
**Précédente** : [v0.901](archive/V0_901_RELEASE_SCOPE.md)
---
## 1. Objectif
Deuxième version de la Phase 9. Complète les modules **Social** (hashtags trending, explore amélioré, QR code profil, referral, partage profil), **Chat** (envoi images, GIFs Giphy, partage tracks, pin/bookmark messages), **Notifications transactionnelles** (emails bienvenue, confirmation, reset, follower, achat/vente, newsletter), et **Profils** (URL personnalisée, badge vérifié, rôles artiste/producteur/label, suppression compte GDPR).
---
## 2. État actuel (post-v0.901)
| Composant | État | Détail |
|-----------|------|--------|
| **Social feed** | ✅ Livré v0.301 | Feed API, explore, filtres |
| **Groupes** | ✅ Livré v0.302 | Request join, invite, rôles |
| **Trending** | ✅ Livré v0.203 | GET /social/trending, cache Redis |
| **Hashtags dans posts** | ❌ Absent | Pas de parsing hashtag ni trending hashtags |
| **QR code profil** | ❌ Absent | Pas de génération QR |
| **Referral / invitations** | ❌ Absent | Pas de système d'invitation |
| **Partage profil lien** | ❌ Absent | Pas de lien public avec preview |
| **Chat WebSocket** | ✅ Livré v0.502 | Messages, typing, read receipts, reactions |
| **Envoi images chat** | ❌ Absent | Texte uniquement |
| **GIF (Giphy)** | ❌ Absent | Pas d'intégration Giphy |
| **Partage tracks chat** | ❌ Absent | Pas d'embed track dans le chat |
| **Pin messages** | ❌ Absent | Pas de messages épinglés |
| **Bookmark messages** | ❌ Absent | Pas de messages sauvegardés |
| **Notifications push** | ✅ Livré v0.302 | Web Push, préférences |
| **Emails transactionnels** | ❌ Absent | Pas d'emails automatisés (bienvenue, achat, etc.) |
| **Profils** | ✅ Livré v0.103 | Bannière, liens sociaux, privé |
| **URL personnalisée** | ❌ Absent | Pas de /u/username |
| **Badge vérifié** | ❌ Absent | Pas de système de vérification |
| **Rôles artiste/producteur** | ⚠️ Partiel | Rôle Artist existe, pas Producer/Label |
| **Suppression compte** | ✅ Livré v0.803 | DELETE /users/me |
---
## 3. Lots
### Lot SO1 — Social Complet
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| SO1-01 | Hashtags — parsing `#hashtag` dans posts, stockage dans `post_hashtags` table, `GET /social/hashtags/trending` (top 20) | Backend, migrations | M |
| SO1-02 | Hashtags frontend — lien cliquable dans les posts, page `/social/hashtags/:tag` filtrée | Frontend | M |
| SO1-03 | Explore amélioré — sections trending hashtags, recommended users, popular tracks, top groups | Frontend | M |
| SO1-04 | QR code profil — `GET /users/:id/qr` retourne PNG QR code (lien vers profil public), affichage dans profil | Backend (qrcode lib), frontend | M |
| SO1-05 | Referral / invitations — `POST /invitations` (email + lien unique), tracking inscrits via referral, bonus XP futur | Backend, migrations | M |
| SO1-06 | Partage profil — `/u/:username` route publique, Open Graph meta tags (titre, avatar, bio), bouton partage | Backend, frontend | M |
| SO1-07 | Tests — hashtag parsing, trending sort, QR generation, invitation flow | Tests | M |
### Lot CH1 — Chat Enrichi
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| CH1-01 | Envoi images — upload image dans conversation (S3 storage), affichage inline, preview thumbnail | WebSocket handlers, frontend chat | L |
| CH1-02 | GIF integration — recherche Giphy API (`GET /chat/gifs?q=...`), picker dans chat, envoi comme message type "gif" | Backend proxy, frontend | L |
| CH1-03 | Partage tracks — message type "track_share" avec track_id, embed player mini dans le chat | WebSocket handlers, frontend | M |
| CH1-04 | Pin messages — `PinMessage` / `UnpinMessage` WebSocket commands, affichage pinned en haut de conversation | WebSocket handlers, frontend | M |
| CH1-05 | Bookmark messages — `POST /chat/bookmarks/:messageId`, `GET /chat/bookmarks`, page bookmarks dans chat sidebar | Backend, frontend | M |
| CH1-06 | Tests — image upload, GIF fetch, track embed, pin/unpin, bookmark CRUD | Tests | M |
### Lot NF1 — Emails Transactionnels
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| NF1-01 | Email service — abstraction SMTP/SendGrid, templates HTML, queue (goroutine background) | `internal/services/email_service.go` (nouveau) | L |
| NF1-02 | Template bienvenue — envoyé après inscription validée | Templates | S |
| NF1-03 | Template confirmation email — envoyé sur demande changement email | Templates | S |
| NF1-04 | Template reset password — envoyé sur demande reset (remplacer le flow existant si besoin) | Templates | S |
| NF1-05 | Template nouveau follower — envoyé quand quelqu'un follow (si pref activée) | Templates | S |
| NF1-06 | Template achat/vente — envoyé au buyer (confirmation achat) et seller (notification vente) | Templates | S |
| NF1-07 | Newsletter opt-in — `PUT /users/me/preferences` avec `newsletter: true`, cron hebdomadaire avec résumé activité | Backend, templates | M |
| NF1-08 | Frontend — préférences email dans Settings (toggle par type), unsubscribe link dans chaque email | Frontend | M |
| NF1-09 | Tests — email service mock, template rendering, preferences respect | Tests | M |
### Lot PR1 — Profils Complets
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| PR1-01 | URL personnalisée — `/u/:username` route publique, résolution username → user ID | Backend routes, frontend | M |
| PR1-02 | Badge vérifié — migration ajout `is_verified` sur users, `POST /admin/users/:id/verify`, badge dans UI | Backend, frontend | M |
| PR1-03 | Rôles artiste/producteur/label — migration ajout rôles Producer et Label, sélection dans Settings, badge rôle dans profil | Backend, frontend | M |
| PR1-04 | Open Graph meta — serveur-side rendering des meta tags pour `/u/:username` (og:title, og:image, og:description) | Backend middleware | M |
| PR1-05 | Tests — username resolution, verification, role assignment | Tests | M |
### Lot QA1 — Tests & Release
| # | Tâche | Fichiers impactés | Effort |
|---|-------|--------------------|--------|
| QA1-01 | Smoke test v0.902 | `docs/SMOKE_TEST_V0902.md` | S |
| QA1-02 | Mise à jour docs | `docs/` | S |
| QA1-03 | Rétrospective, archivage, placeholder v0.903, tag | `docs/`, Git | S |
---
## 4. Hors scope v0.902
| Élément | Version cible |
|---------|---------------|
| Recherche phonétique / spell correction | v0.903 |
| Smart playlists | v0.903 |
| Session management (device list) | v0.903 |
| Load testing (k6) | v0.903 |
| Rapports mensuels email | v2.0 |
| Son notification personnalisable | v2.0 |
| Envoi de vidéos dans chat | v2.0 |
| Forums de discussion groupe | v2.0 |
| Événements de groupe | v2.0 |
| Markdown support chat | v2.0 |
---
## 5. Critères d'acceptation
- [ ] Hashtags : parsing dans posts, trending top 20, page filtrée par hashtag
- [ ] Explore : sections trending hashtags, recommended, popular, groups
- [ ] QR code : PNG généré pour chaque profil, affiché dans profil
- [ ] Referral : invitation par email, tracking inscriptions via referral
- [ ] Profil public : `/u/:username`, Open Graph meta tags
- [ ] Chat images : upload + affichage inline, preview thumbnail
- [ ] Chat GIFs : recherche Giphy, picker, envoi comme message
- [ ] Chat track share : embed player mini dans les messages
- [ ] Pin messages : épingler/désépingler, affichage en haut
- [ ] Bookmark messages : sauvegarder, page bookmarks
- [ ] Emails : bienvenue, confirmation, reset, follower, achat/vente
- [ ] Newsletter : opt-in, cron hebdomadaire, unsubscribe
- [ ] Badge vérifié : admin peut vérifier, badge affiché
- [ ] Rôles Producer/Label : assignation, badge
- [ ] Tag v0.902 créé
---
## 6. Risques
| Risque | Mitigation |
|--------|------------|
| Giphy API rate limiting | Cache réponses 5min, fallback si indisponible |
| Images chat storage coût | Compression + resize avant upload, limit 5MB |
| Email deliverability | SPF/DKIM/DMARC config, utiliser SendGrid en prod |
| QR code large (SVG) | Générer PNG server-side, cache 24h |
| Hashtag spam | Rate limit création posts, modération auto sur hashtags abusifs |
| Open Graph SSR | Middleware Go qui injecte les meta tags, pas de SSR React complet |
---
## 7. Références
- [V0_901_RELEASE_SCOPE.md](archive/V0_901_RELEASE_SCOPE.md)
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md)
- `veza-backend-api/internal/websocket/chat/` (WebSocket handlers)
- `veza-backend-api/internal/core/social/` (social service)
- `apps/web/src/features/chat/` (chat frontend)
- `apps/web/src/features/social/` (social frontend)
- `apps/web/src/components/settings/` (profile settings)
- [Giphy API](https://developers.giphy.com/docs/api/)
- [go-qrcode](https://github.com/skip2/go-qrcode)