# Guide d'implémentation v0.302 **Version** : v0.302 **Date** : 21 février 2026 **Référence** : [V0_302_RELEASE_SCOPE.md](V0_302_RELEASE_SCOPE.md) --- ## 1. Résumé | Lot | Statut | Description | |-----|--------|-------------| | S2 | ✅ Livré | Groupes avancés — demander à rejoindre, inviter, rôles, feed groupes, mes groupes | | N1 | ✅ Livré | Web Push — subscription, envoi sur événement, préférences, badge | | P2 | ✅ Livré | Présence enrichie — rich presence (track), mode invisible | | C2 | ⏸ Reporté v0.303 | Chat appels WebRTC — ticket dans V0_303_RELEASE_SCOPE.md | --- ## 2. Migrations Toutes les migrations sont dans `veza-backend-api/migrations/` : | # | Fichier | Description | |---|---------|-------------| | 069 | `069_groups_and_members.sql` | groups, group_members (prérequis S2) | | 089 | `089_group_join_requests.sql` | group_join_requests | | 090 | `090_push_subscriptions.sql` | push_subscriptions | | 091 | `091_user_presence_invisible.sql` | user_presence.invisible | | 092 | `092_group_invitations.sql` | group_invitations | | 093 | `093_notification_preferences.sql` | notification_preferences | | 094 | `094_user_presence_rich.sql` | user_presence (track_id, track_title) | --- ## 3. Backend — Routes et handlers ### Lot S2 — Groupes avancés | Méthode | Route | Handler | |---------|-------|---------| | GET | `/api/v1/social/groups/mine` | `groupHandler.ListMyGroups` | | POST | `/api/v1/social/groups/:id/request` | `groupHandler.RequestToJoin` | | GET | `/api/v1/social/groups/:id/requests` | `groupHandler.ListJoinRequests` | | POST | `/api/v1/social/groups/:id/requests/:request_id/approve` | `groupHandler.ApproveJoinRequest` | | POST | `/api/v1/social/groups/:id/requests/:request_id/reject` | `groupHandler.RejectJoinRequest` | | POST | `/api/v1/social/groups/:id/invite` | `groupHandler.InviteMember` | | PUT | `/api/v1/social/groups/:id/members/:user_id/role` | `groupHandler.UpdateMemberRole` | **Fichiers** : `internal/handlers/group_handler.go`, `internal/core/social/group_service.go`, `internal/api/routes_social.go` ### Lot N1 — Notifications push | Méthode | Route | Handler | |---------|-------|---------| | POST | `/api/v1/notifications/push/subscribe` | `NotificationHandlersInstance.SubscribePush` | | GET | `/api/v1/notifications/preferences` | `NotificationHandlersInstance.GetPreferences` | | PUT | `/api/v1/notifications/preferences` | `NotificationHandlersInstance.UpdatePreferences` | **Fichiers** : `internal/services/push_service.go`, `internal/handlers/notification_handlers.go`, `internal/api/routes_core.go` ### Lot P2 — Présence enrichie | Méthode | Route | Handler | |---------|-------|---------| | PUT | `/api/v1/users/me/presence` | `PresenceHandler.UpdatePresence` | **Corps** : `{ status?, invisible?, track_id?, track_title? }` **Fichiers** : `internal/handlers/presence_handler.go`, `internal/services/presence_service.go` --- ## 4. Frontend — Composants et services ### Lot S2 | Fichier | Rôle | |---------|------| | `src/services/groupService.ts` | API client — listMine, requestJoin, approveRequest, rejectRequest, invite, updateMemberRole | | `src/components/social/groups/GroupsView.tsx` | Liste groupes, onglet « Mes groupes » | | `src/components/social/groups/group-detail-view/useGroupDetailView.ts` | Logique détail groupe, demandes, invitations, rôles | ### Lot N1 | Fichier | Rôle | |---------|------| | `src/features/settings/components/PushPreferencesSection.tsx` | Préférences push (follow, like, message) | | `src/features/notifications/hooks/usePushSubscribe.ts` | Subscription Web Push via pushManager | | `public/sw.ts` | Service Worker — gestion push events, badge | ### Lot P2 | Fichier | Rôle | |---------|------| | `src/features/presence/hooks/usePresenceSync.ts` | Sync présence (status, track) vers API | | `src/features/settings/components/PresenceInvisibleToggle.tsx` | Toggle mode invisible | ### MSW handlers | Fichier | Routes mockées | |---------|---------------| | `src/mocks/handlers-social.ts` | groups/mine, groups/:id/request, groups/:id/requests, approve, reject, invite | | `src/mocks/handlers-misc.ts` | push/subscribe, preferences, users/me/presence | --- ## 5. Configuration ### Variables d'environnement | Composant | Variable | Obligatoire | Description | |-----------|----------|-------------|-------------| | Backend | `VAPID_PUBLIC_KEY` | Oui (pour push) | Clé publique VAPID Web Push | | Backend | `VAPID_PRIVATE_KEY` | Oui (pour push) | Clé privée VAPID Web Push | | Frontend | `VITE_FCM_VAPID_KEY` | Non | Clé publique VAPID (même que backend) pour pushManager.subscribe | Sans VAPID configuré, le backend accepte les requêtes mais les push ne seront pas envoyés. --- ## 6. Validation ### Commandes ```bash # Backend cd veza-backend-api && go build ./... # Frontend cd apps/web && npm run build ``` ### Tests légers ```bash # Backend cd veza-backend-api && go test ./... -short # Frontend cd apps/web && npm test -- --run ``` --- ## Références - [V0_302_RELEASE_SCOPE.md](V0_302_RELEASE_SCOPE.md) — Scope et critères - [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus anti-scope-creep - [FEATURE_STATUS.md](FEATURE_STATUS.md) — Statut des features