99 lines
4.8 KiB
Markdown
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
|