4.8 KiB
4.8 KiB
Plan d'implémentation v0.303 — Lot C2 Chat appels WebRTC
Version cible : v0.303
Objectif : Appels audio 1-to-1 fonctionnels via WebRTC
Référence : V0_303_RELEASE_SCOPE.md
Dernière mise à jour : février 2026
Diagramme de dépendances C2
flowchart TD
subgraph ChatServer [Chat Server Rust]
C2_1a[IncomingMessage CallOffer/Answer/ICE/Hangup/Reject]
C2_1b[OutgoingMessage CallOffer/Answer/ICE/Hangup/Rejected]
C2_1c[send_to_user WebSocketManager]
C2_1d[Handler match arms]
end
subgraph Frontend [Frontend React]
C2_2[useWebRTC hook]
C2_3[CallButton IncomingCallModal ActiveCallBar]
end
C2_1a --> C2_1d
C2_1b --> C2_1d
C2_1c --> C2_1d
C2_1d --> C2_2
C2_2 --> C2_3
Phase 0 — Vérification préalable
| # | Tâche | Fichiers | Commit suggéré |
|---|---|---|---|
| 0.1 | Vérifier que veza-chat-server compile | veza-chat-server/ |
— |
| 0.2 | Vérifier que apps/web build OK | apps/web/ |
— |
| 0.3 | Lire structure IncomingMessage/OutgoingMessage | veza-chat-server/src/websocket/mod.rs |
— |
Phase 1 — C2.1 Signalisation (Chat Server)
| # | Tâche | Fichiers | Commit suggéré |
|---|---|---|---|
| 1.1 | Ajouter variants IncomingMessage (CallOffer, CallAnswer, ICECandidate, CallHangup, CallReject) | veza-chat-server/src/websocket/mod.rs |
feat(chat-server): add call signaling IncomingMessage variants |
| 1.2 | Ajouter variants OutgoingMessage (CallOffer, CallAnswer, ICECandidate, CallHangup, CallRejected) | veza-chat-server/src/websocket/mod.rs |
feat(chat-server): add call signaling OutgoingMessage variants |
| 1.3 | Implémenter send_to_user dans WebSocketManager | veza-chat-server/src/websocket/ (broadcast ou manager) |
feat(chat-server): add send_to_user for 1-to-1 delivery |
| 1.4 | Ajouter RateLimitAction::CallSignaling | veza-chat-server/src/security/rate_limiter.rs |
feat(chat-server): add CallSignaling rate limit |
| 1.5 | Handler match arms pour CallOffer, CallAnswer, ICECandidate, CallHangup, CallReject | veza-chat-server/src/websocket/handler.rs |
feat(chat-server): handle call signaling messages |
| 1.6 | Vérifier conversation DM (2 participants) avant relayer | handler.rs |
(inclus dans 1.5) |
Validation : cargo build --release dans veza-chat-server.
Phase 2 — C2.2-C2.4 UI et WebRTC (Frontend)
| # | Tâche | Fichiers | Commit suggéré |
|---|---|---|---|
| 2.1 | Créer useWebRTC hook (RTCPeerConnection, SDP/ICE exchange via WS) | apps/web/src/features/chat/hooks/useWebRTC.ts |
feat(chat): add useWebRTC hook |
| 2.2 | Créer CallButton (DM uniquement) | apps/web/src/features/chat/components/CallButton.tsx |
feat(chat): add CallButton component |
| 2.3 | Créer IncomingCallModal (Accepter/Refuser) | apps/web/src/features/chat/components/IncomingCallModal.tsx |
feat(chat): add IncomingCallModal |
| 2.4 | Créer ActiveCallBar (mute, hangup) | apps/web/src/features/chat/components/ActiveCallBar.tsx |
feat(chat): add ActiveCallBar |
| 2.5 | Intégrer états call dans chatStore (Zustand) | Store chat existant | feat(chat): add call state to chat store |
| 2.6 | Connecter CallButton, IncomingCallModal, ActiveCallBar à ConversationView | ConversationView.tsx ou équivalent |
feat(chat): wire call UI to conversation |
| 2.7 | getUserMedia audio + RTCPeerConnection (C2.3 MVP) | useWebRTC.ts |
(inclus dans 2.1) |
| 2.8 | getUserMedia video (C2.4 optionnel) | useWebRTC.ts |
feat(chat): add video support to WebRTC |
Validation : npm run build, Storybook stories pour CallButton, IncomingCallModal, ActiveCallBar.
Phase 3 — Finalisation
| # | Tâche | Fichiers | Commit suggéré |
|---|---|---|---|
| 3.1 | MSW handlers pour messages call (si tests) | apps/web/src/mocks/handlers.ts |
test(chat): add MSW handlers for call signaling |
| 3.2 | Stories Storybook (Loading, Error, Empty) | CallButton.stories.tsx, etc. |
feat(chat): add call component stories |
| 3.3 | Mise à jour CHANGELOG v0.303 | CHANGELOG.md |
docs: update CHANGELOG for v0.303 |
| 3.4 | Vérification SCOPE_CONTROL, FEATURE_STATUS | — | — |
Ordre d'exécution recommandé
- Phase 0 — Vérification (15 min)
- Phase 1 — Signalisation Chat Server (1-2 j)
- Phase 2 — Frontend (2-3 j)
- Phase 3 — Finalisation (0.5 j)
Références
- V0_303_RELEASE_SCOPE.md — Scope détaillé
- veza-chat-server/src/websocket/mod.rs — Types existants
- STORYBOOK_CONTRACT.md — Contrat Storybook