207 lines
9.1 KiB
Markdown
207 lines
9.1 KiB
Markdown
# Scope v0.302 — Phase 3 Social (suite)
|
|
|
|
**Version cible** : v0.302 (X=3, Y=2)
|
|
**Prérequis** : v0.301 taguée et mergée dans main
|
|
**Objectif** : Chat (appels, notifications), Social (groupes avancés), Présence enrichie
|
|
**Dernière mise à jour** : 20 février 2026
|
|
**Effort estimé** : 6-8 semaines de développement
|
|
|
|
---
|
|
|
|
## 1. Principe directeur
|
|
|
|
> **v0.302 = suite Phase 3 Social.**
|
|
>
|
|
> Quatre axes principaux :
|
|
> 1. **Groupes avancés (Lot S2)** : Demander à rejoindre, inviter, rôles, feed groupes
|
|
> 2. **Notifications push (Lot N1)** : Web Push API navigateur
|
|
> 3. **Chat appels (Lot C2)** : Appels audio/vidéo WebRTC (MVP)
|
|
> 4. **Présence enrichie (Lot P2)** : Rich presence (track en cours), mode invisible
|
|
|
|
---
|
|
|
|
## 2. Contexte — État post v0.301
|
|
|
|
### 2.1 Livré en v0.301
|
|
|
|
| Lot | Feature | Statut |
|
|
|-----|---------|--------|
|
|
| P0 | Chat Server compilable, auth WebSocket | ✅ |
|
|
| C1 | Typing indicators, read receipts, delivered | ✅ |
|
|
| P1 | Présence API, PresenceBadge, last_seen | ✅ |
|
|
| S1 | Feed enrichi, pagination, explore, filtres all/following/groups | ✅ |
|
|
|
|
### 2.2 Fondation existante (à enrichir)
|
|
|
|
| Domaine | Existant | À ajouter v0.302 |
|
|
|---------|----------|-------------------|
|
|
| **Groupes** | CRUD, join, leave, rôles (admin/modo/member) | Demander à rejoindre (privé), inviter, feed groupes |
|
|
| **Notifications** | In-app (liste, marquer lu) | Web Push navigateur |
|
|
| **Chat** | DM, rooms, typing, receipts | Appels audio/vidéo WebRTC |
|
|
| **Présence** | online/away/offline, last_seen | Rich presence (track), mode invisible |
|
|
|
|
### 2.3 Composants techniques
|
|
|
|
| Composant | État | Action v0.302 |
|
|
|-----------|------|---------------|
|
|
| veza-backend-api | ✅ | Nouvelles routes groupes, push subscriptions |
|
|
| veza-chat-server | ✅ | Signalisation WebRTC (si Lot C2) |
|
|
| apps/web | ✅ | Groupes avancés UI, Web Push, appels UI |
|
|
| Stream Server | ⚠️ | Hors scope (pas nécessaire pour appels) |
|
|
|
|
---
|
|
|
|
## 3. Features IN SCOPE v0.302
|
|
|
|
### 3.1 Lot S2 — Groupes avancés
|
|
|
|
**Objectif** : Enrichir les groupes sociaux (demander à rejoindre, inviter, feed).
|
|
**Effort** : M (4-5 jours)
|
|
**Référence** : veza_full_features_list.md §6.3 (216-225)
|
|
|
|
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|---------|----------|-------------------|
|
|
| S2.1 | **Demander à rejoindre** | Groupe privé : requête d'adhésion | POST /groups/:id/request, table group_join_requests | Bouton « Demander à rejoindre », liste demandes (admin) | Flux demande → approbation fonctionnel |
|
|
| S2.2 | **Inviter membres** | Admin/modo peut inviter par email ou user_id | POST /groups/:id/invite, notifications | Modal inviter, lien ou recherche user | Invitation envoyée, user peut accepter |
|
|
| S2.3 | **Rôles (assign/revoke)** | Promouvoir modo, rétrograder | PUT /groups/:id/members/:user_id/role | UI rôles dans GroupDetailView | Admin peut changer rôle membre |
|
|
| S2.4 | **Feed groupes** | Posts des groupes dont user est membre | GetGlobalFeed type=groups déjà implémenté | Vérifier filtre groups retourne données | Feed « Groupes » affiche posts des groupes |
|
|
| S2.5 | **Liste mes groupes** | Groupes dont l'utilisateur est membre | GET /social/groups/mine | Onglet ou section « Mes groupes » | Liste groupes de l'utilisateur |
|
|
|
|
**Fichiers clés** :
|
|
- Backend : `group_service.go`, `social_group_handler.go`, migrations
|
|
- Frontend : `GroupDetailView`, `GroupsView`, `groupService.ts`, `SocialViewFeed` (filtre groups)
|
|
|
|
---
|
|
|
|
### 3.2 Lot N1 — Notifications push (Web Push)
|
|
|
|
**Objectif** : Notifications navigateur (sans FCM/APNs).
|
|
**Effort** : M (3-4 jours)
|
|
**Référence** : Module 2.3 (61-62), features 529, 552-553
|
|
|
|
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|---------|----------|-------------------|
|
|
| N1.1 | **Subscription** | Enregistrer endpoint Web Push | POST /notifications/push/subscribe (VAPID) | Service Worker, pushManager.subscribe | Subscription stockée |
|
|
| N1.2 | **Envoi** | Déclencher push sur événement (follow, like, message) | Intégrer web-push dans notification_service | — | Push reçu en arrière-plan |
|
|
| N1.3 | **Préférences** | Activer/désactiver par type | GET/PUT /notifications/preferences | Settings notifications | User peut activer/désactiver push |
|
|
| N1.4 | **Badge** | Compteur non lus sur icône | — | Badge sur favicon ou titre | Badge mis à jour |
|
|
|
|
**Fichiers clés** :
|
|
- Backend : `notification_service.go`, `notification_handlers.go`, migration push_subscriptions
|
|
- Frontend : `sw.ts` (service worker), `useNotifications`, settings
|
|
|
|
**Note** : FCM/APNs pour mobile reportés v0.303+.
|
|
|
|
---
|
|
|
|
### 3.3 Lot C2 — Chat appels (WebRTC)
|
|
|
|
**Objectif** : Appels audio/vidéo 1-to-1 via WebRTC.
|
|
**Effort** : L (5-7 jours)
|
|
**Référence** : Module 5, Video chat intégré (full_features 487)
|
|
|
|
| # | Feature | Tâche détaillée | Chat Server | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|-------------|----------|-------------------|
|
|
| C2.1 | **Signalisation** | SDP/ICE via WebSocket | Messages CallOffer, CallAnswer, ICECandidate | Échange WebRTC via WS | Connexion peer-to-peer établie |
|
|
| C2.2 | **UI appel** | Bouton appeler, modal appel entrant/sortant | — | CallButton, IncomingCallModal, ActiveCallBar | Appel initié, accepté, refusé |
|
|
| C2.3 | **Audio uniquement (MVP)** | Appel audio 1-to-1 | — | getUserMedia audio | Appel audio fonctionnel |
|
|
| C2.4 | **Vidéo (optionnel)** | Activer caméra | — | getUserMedia video | Appel vidéo si temps |
|
|
|
|
**Fichiers clés** :
|
|
- Chat Server : `websocket/handler.rs`, types CallOffer, CallAnswer, ICECandidate
|
|
- Frontend : `useWebRTC`, `CallModal`, `chatStore` (call state)
|
|
|
|
**Option** : Si effort trop élevé, reporter C2 en v0.303 et garder S2, N1, P2.
|
|
|
|
---
|
|
|
|
### 3.4 Lot P2 — Présence enrichie
|
|
|
|
**Objectif** : Rich presence (track en cours), mode invisible.
|
|
**Effort** : S (2-3 jours)
|
|
**Référence** : V0_301 HORS SCOPE → v0.302
|
|
|
|
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|---------|----------|-------------------|
|
|
| P2.1 | **Rich presence** | Champ status_message = « Écoute X » | PresenceService.UpdatePresence(track_id, track_title) | Player envoie track en cours | « Écoute Midnight Drive » affiché |
|
|
| P2.2 | **Mode invisible** | User peut masquer statut | PUT /users/me/presence (invisible: true) | Toggle paramètres | Statut masqué pour les autres |
|
|
|
|
**Fichiers clés** :
|
|
- Backend : `presence_handler.go`, `user_presence` (colonne invisible)
|
|
- Frontend : `playerStore`, `PresenceBadge`, settings
|
|
|
|
---
|
|
|
|
## 4. Récapitulatif par lot
|
|
|
|
| Lot | Priorité | Effort | Dépendances |
|
|
|-----|----------|--------|-------------|
|
|
| S2 | Haute | M (4-5 j) | Aucune |
|
|
| N1 | Haute | M (3-4 j) | Aucune |
|
|
| C2 | Moyenne | L (5-7 j) | Chat Server stable |
|
|
| P2 | Moyenne | S (2-3 j) | P1 (présence) |
|
|
|
|
**Ordre recommandé** : S2, N1 en parallèle → P2 → C2 (ou C2 reporté).
|
|
|
|
---
|
|
|
|
## 5. Features HORS SCOPE v0.302
|
|
|
|
| Feature | Raison | Version cible |
|
|
|---------|--------|---------------|
|
|
| FCM / APNs (mobile) | Infra externe, apps natives | v0.303+ |
|
|
| Appels de groupe (3+) | Complexité WebRTC | v0.304+ |
|
|
| Chiffrement E2E messages | Effort majeur | v0.303+ |
|
|
| Forum de discussion par groupe | Scope S2 suffit | v0.303 |
|
|
| Événements de groupe | Scope S2 suffit | v0.303 |
|
|
|
|
---
|
|
|
|
## 6. Migrations et schémas
|
|
|
|
| Migration | Description |
|
|
|-----------|-------------|
|
|
| 089 | group_join_requests (group_id, user_id, status, created_at) |
|
|
| 090 | push_subscriptions (user_id, endpoint, p256dh, auth, created_at) |
|
|
| 091 | user_presence.invisible (BOOLEAN DEFAULT false) — si pas déjà dans 088 |
|
|
|
|
---
|
|
|
|
## 7. Critères de livraison v0.302
|
|
|
|
- [ ] Lot S2 : Demander à rejoindre, inviter, rôles, feed groupes, mes groupes
|
|
- [ ] Lot N1 : Web Push subscription, envoi sur événement, préférences
|
|
- [ ] Lot C2 : Appel audio 1-to-1 (ou reporté avec ticket)
|
|
- [ ] Lot P2 : Rich presence (track), mode invisible
|
|
- [ ] Tests : `go test ./...` OK, `npm run build` OK
|
|
- [ ] Documentation : FEATURE_STATUS, PROJECT_STATE, CHANGELOG mis à jour
|
|
|
|
---
|
|
|
|
## 8. Checklist pré-merge
|
|
|
|
- [ ] Tous les lots IN SCOPE terminés ou reportés (avec ticket)
|
|
- [ ] Pas de régression sur v0.301
|
|
- [ ] SCOPE_CONTROL.md référence V0_302_RELEASE_SCOPE.md
|
|
- [ ] FEATURE_STATUS.md mis à jour
|
|
- [ ] CHANGELOG v0.302
|
|
- [ ] MSW handlers pour nouvelles routes
|
|
|
|
---
|
|
|
|
## 9. Transition vers v0.303
|
|
|
|
À l'issue de v0.302 :
|
|
- Phase 3 Social avancée (~400 / 600 features)
|
|
- Prochaine version : **v0.303** — Chat (E2E, appels groupe), Notifications (FCM), Social (forum groupes)
|
|
- Document de scope : `V0_303_RELEASE_SCOPE.md` (à créer après tag v0.302)
|
|
|
|
---
|
|
|
|
## Références
|
|
|
|
- [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md) — Version précédente
|
|
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus anti-scope-creep
|
|
- [FEATURE_STATUS.md](FEATURE_STATUS.md) — Statut des features
|
|
- [PROJECT_STATE.md](PROJECT_STATE.md) — État actuel du projet
|
|
- [veza_full_features_list.md](archive/root-md/veza_full_features_list.md) — Cible v1.0 (600 features)
|