veza/docs/V0_302_IMPLEMENTATION.md

5.2 KiB

Guide d'implémentation v0.302

Version : v0.302
Date : 21 février 2026
Référence : 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

# Backend
cd veza-backend-api && go build ./...

# Frontend
cd apps/web && npm run build

Tests légers

# Backend
cd veza-backend-api && go test ./... -short

# Frontend
cd apps/web && npm test -- --run

Références