veza/docs/PLAN_V0_303_IMPLEMENTATION.md

99 lines
4.8 KiB
Markdown

# 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