# 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](V0_303_RELEASE_SCOPE.md) **Dernière mise à jour** : février 2026 --- ## Diagramme de dépendances C2 ```mermaid 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é 1. **Phase 0** — Vérification (15 min) 2. **Phase 1** — Signalisation Chat Server (1-2 j) 3. **Phase 2** — Frontend (2-3 j) 4. **Phase 3** — Finalisation (0.5 j) --- ## Références - [V0_303_RELEASE_SCOPE.md](V0_303_RELEASE_SCOPE.md) — Scope détaillé - [veza-chat-server/src/websocket/mod.rs](../veza-chat-server/src/websocket/mod.rs) — Types existants - [STORYBOOK_CONTRACT.md](../apps/web/docs/STORYBOOK_CONTRACT.md) — Contrat Storybook