9.1 KiB
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 :
- Groupes avancés (Lot S2) : Demander à rejoindre, inviter, rôles, feed groupes
- Notifications push (Lot N1) : Web Push API navigateur
- Chat appels (Lot C2) : Appels audio/vidéo WebRTC (MVP)
- 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 buildOK - 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 — Version précédente
- SCOPE_CONTROL.md — Processus anti-scope-creep
- FEATURE_STATUS.md — Statut des features
- PROJECT_STATE.md — État actuel du projet
- veza_full_features_list.md — Cible v1.0 (600 features)