207 lines
9.6 KiB
Markdown
207 lines
9.6 KiB
Markdown
# Scope v0.301 — Phase 3 Social
|
|
|
|
**Version cible** : v0.301 (X=3, Y=1)
|
|
**Prérequis** : v0.203 taguée et mergée dans main
|
|
**Objectif** : Phase 3 Social — Chat avancé, Présence, Social complet
|
|
**Dernière mise à jour** : 20 février 2026
|
|
**Effort estimé** : 5-7 semaines de développement
|
|
|
|
---
|
|
|
|
## 1. Principe directeur
|
|
|
|
> **v0.301 = première version Phase 3 (Social).**
|
|
>
|
|
> Trois axes principaux :
|
|
> 1. **Chat avancé (Lot C1)** : Typing indicators, read receipts, delivered status
|
|
> 2. **Présence (Lot P1)** : Statut en ligne/hors ligne, last seen, liste utilisateurs en ligne
|
|
> 3. **Social enrichi (Lot S1)** : Feed amélioré, posts enrichis, groupes, exploration
|
|
|
|
---
|
|
|
|
## 2. Contexte — État post v0.203
|
|
|
|
### 2.1 Livré en v0.203
|
|
|
|
| Lot | Feature | Statut |
|
|
|-----|---------|--------|
|
|
| L | Social Trending (GET /social/trending, cache Redis) | ✅ |
|
|
| K | Recherche enrichie (pg_trgm, AND/OR/NOT) | ✅ |
|
|
| D1 | Queue collaborative (sessions partagées, polling) | ✅ |
|
|
|
|
### 2.2 Fondation existante (à enrichir)
|
|
|
|
| Domaine | Existant | À ajouter v0.301 |
|
|
|---------|----------|-------------------|
|
|
| **Chat** | WebSocket (veza-chat-server), DM, rooms, messages | Typing, read receipts, delivered — Chat Server doit compiler |
|
|
| **Présence** | PresenceManager (Rust, i32 user_id), non exposé | API REST ou WS, UUID, last_seen, statut |
|
|
| **Social** | Feed, posts, groups, follows, blocks, trending | Enrichissement feed, posts audio/vidéo, exploration |
|
|
|
|
### 2.3 Blocage technique — Chat Server Rust
|
|
|
|
| Composant | État | Action v0.301 |
|
|
|-----------|------|---------------|
|
|
| veza-chat-server | ⚠️ Erreurs SQLx | **P0** : Corriger compilation avant Lot C1 |
|
|
| veza-stream-server | ⚠️ Imports manquants | Optionnel (hors scope chat) |
|
|
|
|
**Référence** : [AUDIT_CHAT_SERVER_RUST.md](../veza-chat-server/AUDIT_CHAT_SERVER_RUST.md)
|
|
|
|
---
|
|
|
|
## 3. Features IN SCOPE v0.301
|
|
|
|
### 3.1 Lot P0 — Correction Chat Server (prérequis Lot C1)
|
|
|
|
**Objectif** : Rendre le Chat Server compilable et opérationnel.
|
|
**Effort** : M (3-5 jours)
|
|
**Référence** : AUDIT_CHAT_SERVER_RUST.md, erreurs SQLx
|
|
|
|
| # | Feature | Tâche détaillée | Critère de sortie |
|
|
|---|---------|-----------------|-------------------|
|
|
| P0.1 | **SQLx** | Corriger requêtes SQLx (types UUID vs i32, colonnes manquantes) | `cargo build --release` OK |
|
|
| P0.2 | **Migrations** | Aligner schéma DB avec code (conversations, messages, read_receipts) | Migrations appliquées sans erreur |
|
|
| P0.3 | **Auth WebSocket** | Token JWT en header ou body, pas en query params | Token non exposé dans URL |
|
|
| P0.4 | **Tests** | Démarrer Chat Server, connexion WS fonctionnelle | Connexion établie, messages échangés |
|
|
|
|
**Fichiers clés** :
|
|
- `veza-chat-server/src/**/*.rs`, `veza-chat-server/migrations/`
|
|
|
|
---
|
|
|
|
### 3.2 Lot C1 — Chat avancé (typing, read receipts)
|
|
|
|
**Objectif** : Indicateurs de frappe et statuts de lecture.
|
|
**Effort** : M (4-5 jours)
|
|
**Prérequis** : Lot P0 terminé
|
|
**Référence** : Module 5.2, features 174-175 ; CHAT_DELIVERED_AND_TYPING.md
|
|
|
|
| # | Feature | Tâche détaillée | Chat Server | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|-------------|----------|-------------------|
|
|
| C1.1 | **Typing indicators** | Broadcast UserTyping sur WS | IncomingMessage::Typing, broadcast OutgoingMessage::UserTyping | TypingIndicator.tsx connecté, debounce 300ms | « X est en train d'écrire... » affiché |
|
|
| C1.2 | **Read receipts** | Marquer message comme lu | Handler MarkAsRead, table read_receipts, types UUID | Envoyer MarkAsRead à réception, afficher « Vu à HH:mm » | Statut lu visible |
|
|
| C1.3 | **Delivered status** | Message reçu (pas encore lu) | Table delivered_status, broadcast MessageDelivered | Envoyer Delivered à réception, afficher « Livré » | Statut livré visible |
|
|
|
|
**Fichiers clés** :
|
|
- Chat Server : `typing_indicator.rs`, `read_receipts.rs`, `websocket/handler.rs`
|
|
- Frontend : `TypingIndicator.tsx`, `useChatInterface.ts`, `chatStore.ts`, types websocket
|
|
|
|
---
|
|
|
|
### 3.3 Lot P1 — Présence (statut, last seen)
|
|
|
|
**Objectif** : Afficher qui est en ligne et dernière activité.
|
|
**Effort** : M (3-4 jours)
|
|
**Référence** : Module 5.3, features 176-181
|
|
|
|
| # | Feature | Tâche détaillée | Backend / Chat | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|----------------|----------|-------------------|
|
|
| P1.1 | **API Présence** | GET /users/:id/presence ou via WebSocket | Backend Go : table user_presence, route REST ; ou Chat Server broadcast | Composant PresenceBadge | Statut (online/away/offline) affiché |
|
|
| P1.2 | **Last seen** | Dernière activité utilisateur | Champ last_seen_at, mise à jour à chaque action | Affichage « Vu il y a X min » | Last seen visible sur profil/chat |
|
|
| P1.3 | **Liste en ligne** | Utilisateurs en ligne par salon/conversation | Chat Server : get_room_users ou équivalent | Liste dans ChatSidebar ou conversation | Liste utilisateurs en ligne affichée |
|
|
|
|
**Option A** : Backend Go — table `user_presence`, route REST, mise à jour via middleware ou jobs.
|
|
**Option B** : Chat Server — PresenceManager existant, exposer via WebSocket ou API proxy.
|
|
|
|
**Fichiers clés** :
|
|
- Backend : `user_presence` model, `presence_handler.go`, `routes_users.go`
|
|
- Chat Server : `presence.rs` (UUID au lieu de i32)
|
|
- Frontend : `PresenceBadge.tsx`, `UserAvatar.tsx`, `ChatSidebar.tsx`
|
|
|
|
---
|
|
|
|
### 3.4 Lot S1 — Social enrichi (feed, posts, exploration)
|
|
|
|
**Objectif** : Enrichir le feed social et l'exploration.
|
|
**Effort** : L (5-7 jours)
|
|
**Référence** : Module 6, features 201-215
|
|
|
|
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
|
|---|---------|-----------------|---------|----------|-------------------|
|
|
| S1.1 | **Posts enrichis** | Posts avec track audio, image, vidéo | Vérifier modèles posts (attachments, track_id) | SocialViewFeedItem : afficher player inline si track | Post avec track jouable |
|
|
| S1.2 | **Feed pagination** | Curseur ou offset, infinite scroll | GET /social/feed?cursor=&limit=20 | useInfiniteQuery, IntersectionObserver | Scroll infini fonctionnel |
|
|
| S1.3 | **Exploration** | Page découverte (tendances, suggestions) | GET /social/explore (trending + suggested users) | Page /explore ou onglet Social | Page exploration avec trending + suggestions |
|
|
| S1.4 | **Réactions posts** | Like, comment, repost | Routes existantes (likes, comments) ; repost si manquant | Boutons like/comment/repost sur SocialViewFeedItem | Interactions fonctionnelles |
|
|
| S1.5 | **Filtres feed** | Tous / Abonnements / Groupes | Paramètre type dans GET /social/feed | Onglets ou filtre dans SocialView | Filtrage feed par source |
|
|
|
|
**Fichiers clés** :
|
|
- Backend : `social_handler.go`, `social/service.go`, routes `/social/feed`, `/social/explore`
|
|
- Frontend : `SocialViewFeed.tsx`, `SocialViewFeedItem.tsx`, `SocialViewSidebar.tsx`, `useSocialView.ts`
|
|
|
|
---
|
|
|
|
## 4. Récapitulatif par lot
|
|
|
|
| Lot | Priorité | Effort | Dépendances |
|
|
|-----|----------|--------|-------------|
|
|
| P0 | Critique | M (3-5 j) | Aucune |
|
|
| C1 | Haute | M (4-5 j) | P0 |
|
|
| P1 | Haute | M (3-4 j) | Optionnel P0 (si via Chat Server) |
|
|
| S1 | Haute | L (5-7 j) | Aucune (Backend Go) |
|
|
|
|
**Ordre recommandé** : P0 → C1, P1, S1 (P1 et S1 en parallèle possible).
|
|
|
|
---
|
|
|
|
## 5. Features HORS SCOPE v0.301
|
|
|
|
| Feature | Raison | Version cible |
|
|
|---------|--------|---------------|
|
|
| Appels audio/vidéo | Complexité, WebRTC | v0.302+ |
|
|
| Chiffrement E2E messages | Effort majeur | v0.303+ |
|
|
| Notifications push (FCM/APNs) | Infra externe | v0.302+ |
|
|
| Mode invisible avancé | P1.3 suffit pour v0.301 | v0.302 |
|
|
| Rich presence (track en cours) | Dépend player sync | v0.302 |
|
|
|
|
---
|
|
|
|
## 6. Migrations et schémas
|
|
|
|
| Migration | Description |
|
|
|-----------|-------------|
|
|
| 088 | `user_presence` (user_id, status, last_seen_at, status_message) — si Option A Lot P1 |
|
|
| — | Chat Server : migrations 001, 002 existantes ; corrections si nécessaire |
|
|
|
|
---
|
|
|
|
## 7. Critères de livraison v0.301
|
|
|
|
- [x] Chat Server compile et démarre sans erreur
|
|
- [x] Typing indicators fonctionnels (frontend + Chat Server)
|
|
- [x] Read receipts et delivered status fonctionnels
|
|
- [x] Présence (online/away/offline) visible sur au moins un écran (profil ou chat)
|
|
- [x] Feed social avec pagination et posts enrichis (track inline)
|
|
- [x] Page ou onglet exploration avec trending + suggestions
|
|
- [x] Tests : `go test ./...` OK, `npm run build` OK
|
|
- [x] Documentation : FEATURE_STATUS, PROJECT_STATE, CHANGELOG mis à jour
|
|
|
|
---
|
|
|
|
## 8. Checklist pré-merge
|
|
|
|
- [x] Tous les lots IN SCOPE terminés ou reportés (avec ticket)
|
|
- [x] Pas de régression sur v0.203
|
|
- [x] SCOPE_CONTROL.md référence V0_301_RELEASE_SCOPE.md
|
|
- [x] FEATURE_STATUS.md mis à jour
|
|
- [x] CHANGELOG v0.301
|
|
- [x] MSW handlers pour nouvelles routes (si pertinent)
|
|
|
|
---
|
|
|
|
## 9. Transition vers v0.302
|
|
|
|
À l'issue de v0.301 :
|
|
- Phase 3 Social démarre (~390 / 600 features)
|
|
- Prochaine version : **v0.302** — Chat (appels, notifications push), Social (groupes avancés)
|
|
- Document de scope : `V0_302_RELEASE_SCOPE.md` (à créer après tag v0.301)
|
|
|
|
---
|
|
|
|
## Références
|
|
|
|
- [V0_203_RELEASE_SCOPE.md](V0_203_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)
|
|
- [AUDIT_CHAT_SERVER_RUST.md](../veza-chat-server/AUDIT_CHAT_SERVER_RUST.md) — État Chat Server
|
|
- [CHAT_DELIVERED_AND_TYPING.md](../veza-chat-server/docs/CHAT_DELIVERED_AND_TYPING.md) — Spec typing/receipts
|