veza/veza-chat-server/docs/AUDIT_DELIVERED_TYPING.md
okinrev 5ffcd50e0a P0: stabilisation backend/chat/stream + nouvelle base migrations v1
Backend Go:
- Remplacement complet des anciennes migrations par la base V1 alignée sur ORIGIN.
- Durcissement global du parsing JSON (BindAndValidateJSON + RespondWithAppError).
- Sécurisation de config.go, CORS, statuts de santé et monitoring.
- Implémentation des transactions P0 (RBAC, duplication de playlists, social toggles).
- Ajout d’un job worker structuré (emails, analytics, thumbnails) + tests associés.
- Nouvelle doc backend : AUDIT_CONFIG, BACKEND_CONFIG, AUTH_PASSWORD_RESET, JOB_WORKER_*.

Chat server (Rust):
- Refonte du pipeline JWT + sécurité, audit et rate limiting avancé.
- Implémentation complète du cycle de message (read receipts, delivered, edit/delete, typing).
- Nettoyage des panics, gestion d’erreurs robuste, logs structurés.
- Migrations chat alignées sur le schéma UUID et nouvelles features.

Stream server (Rust):
- Refonte du moteur de streaming (encoding pipeline + HLS) et des modules core.
- Transactions P0 pour les jobs et segments, garanties d’atomicité.
- Documentation détaillée de la pipeline (AUDIT_STREAM_*, DESIGN_STREAM_PIPELINE, TRANSACTIONS_P0_IMPLEMENTATION).

Documentation & audits:
- TRIAGE.md et AUDIT_STABILITY.md à jour avec l’état réel des 3 services.
- Cartographie complète des migrations et des transactions (DB_MIGRATIONS_*, DB_TRANSACTION_PLAN, AUDIT_DB_TRANSACTIONS, TRANSACTION_TESTS_PHASE3).
- Scripts de reset et de cleanup pour la lab DB et la V1.

Ce commit fige l’ensemble du travail de stabilisation P0 (UUID, backend, chat et stream) avant les phases suivantes (Coherence Guardian, WS hardening, etc.).
2025-12-06 11:14:38 +01:00

167 lines
5 KiB
Markdown

# 🔍 AUDIT INITIAL — Delivered Status + Typing Indicators
**Date** : 2025-01-27
**Cible** : `veza-chat-server`
**Objectif** : État actuel avant implémentation P1
---
## 1. TYPING INDICATORS — État actuel
### 1.1. Module existant : `src/typing_indicator.rs`
**Structure présente** :
- `TypingIndicatorManager` existe avec :
- `typing_users: Arc<RwLock<HashMap<String, HashMap<String, DateTime<Utc>>>>>`
- `timeout_duration: Duration::seconds(3)` (hardcodé)
**Méthodes disponibles** :
- `set_typing(conversation_id, user_id)` — marque un user comme "typing"
- `stop_typing(conversation_id, user_id)` — retire un user
- `get_typing_users(conversation_id)` — liste les users actifs (filtre les expirés)
- `cleanup_expired()` — nettoie les entrées expirées
**Manques identifiés** :
1. **Pas de task de monitoring automatique** : `cleanup_expired()` existe mais n'est jamais appelée automatiquement
2. **Pas de broadcast automatique** : le manager ne déclenche pas de broadcast quand un timeout expire
3. **Pas intégré dans WebSocketState** : le manager n'est pas instancié dans `WebSocketState`
4. **Pas de méthode `monitor_timeouts()`** : pas de boucle de fond pour détecter les expirations
### 1.2. WebSocket Messages
**IncomingMessage::Typing** : **N'EXISTE PAS**
- Seuls existent : `SendMessage`, `JoinConversation`, `LeaveConversation`, `MarkAsRead`, `Ping`
**OutgoingMessage::UserTyping** : **N'EXISTE PAS**
- Seuls existent : `NewMessage`, `MessageRead`, `ActionConfirmed`, `Error`, `Pong`
### 1.3. Handler WebSocket
**Pas de branchement pour Typing** dans `handle_incoming_message()` (`src/websocket/handler.rs`)
---
## 2. DELIVERED STATUS — État actuel
### 2.1. Enum MessageReadStatus
**Existe dans `src/read_receipts.rs`** :
```rust
pub enum MessageReadStatus {
Sent,
Delivered, // ✅ Existe mais non utilisé
Read,
}
```
⚠️ **Problème** : `Delivered` existe dans l'enum mais :
- `get_message_status()` retourne toujours `Sent` si pas de read receipt (ligne 230)
- Commentaire TODO : "Implémenter un système de tracking delivered si nécessaire"
### 2.2. Base de données
**Table `delivered_status`** : **N'EXISTE PAS**
- Aucune migration trouvée pour cette table
- Seule table `read_receipts` existe pour les messages lus
### 2.3. Manager dédié
**DeliveredStatusManager** : **N'EXISTE PAS**
- `ReadReceiptManager` gère uniquement les read receipts
- Pas de module `src/delivered_status.rs`
### 2.4. WebSocket Messages
**IncomingMessage::Delivered** : **N'EXISTE PAS**
**OutgoingMessage::MessageDelivered** : **N'EXISTE PAS**
### 2.5. Handler WebSocket
**Pas de branchement pour Delivered** dans `handle_incoming_message()`
---
## 3. PERMISSIONS — État actuel
**PermissionService existe** (`src/security/permission.rs`) :
- `can_read_conversation(user_id, conversation_id)`
- `can_send_message(user_id, conversation_id)`
- `can_mark_read(user_id, conversation_id)`
**Intégration dans handler** :
- `MarkAsRead` utilise déjà `can_mark_read()`
- `SendMessage` utilise déjà `can_send_message()`
---
## 4. ARCHITECTURE ACTUELLE
### 4.1. WebSocketState
```rust
pub struct WebSocketState {
pub message_repo: Arc<MessageRepository>,
pub read_receipt_manager: Arc<ReadReceiptManager>,
pub ws_manager: Arc<WebSocketManager>,
pub jwt_manager: Arc<JwtManager>,
pub permission_service: Arc<PermissionService>,
}
```
**TypingIndicatorManager manquant** dans `WebSocketState`
**DeliveredStatusManager manquant** dans `WebSocketState`
### 4.2. Main.rs
- `ReadReceiptManager` est instancié (ligne 147)
- `PermissionService` est instancié (ligne 148)
- `TypingIndicatorManager` **n'est pas instancié**
- `DeliveredStatusManager` **n'existe pas encore**
---
## 5. RÉSUMÉ DES MANQUES
### Typing Indicators
- ✅ Manager existe mais incomplet
- ❌ Pas de task de monitoring automatique
- ❌ Pas intégré dans WebSocketState
- ❌ Pas de messages WebSocket (Incoming/Outgoing)
- ❌ Pas de branchement dans handler
### Delivered Status
- ✅ Enum `Delivered` existe mais non utilisé
- ❌ Pas de table DB
- ❌ Pas de manager dédié
- ❌ Pas de messages WebSocket (Incoming/Outgoing)
- ❌ Pas de branchement dans handler
---
## 6. PLAN D'IMPLÉMENTATION
### Phase 1 : Infrastructure
1. Créer migration SQL pour `delivered_status`
2. Créer `src/delivered_status.rs` avec `DeliveredStatusManager`
3. Améliorer `TypingIndicatorManager` avec task de monitoring
### Phase 2 : WebSocket Messages
4. Ajouter `IncomingMessage::Typing` et `IncomingMessage::Delivered`
5. Ajouter `OutgoingMessage::UserTyping` et `OutgoingMessage::MessageDelivered`
### Phase 3 : Intégration
6. Ajouter managers dans `WebSocketState`
7. Brancher handlers dans `handle_incoming_message()`
8. Démarrer task de monitoring typing dans `main.rs`
### Phase 4 : Tests & Documentation
9. Tests unitaires
10. Tests d'intégration
11. Documentation complète
---
**Prochaine étape** : Implémentation selon le design cible.