# 🔍 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>>>>` - `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, pub read_receipt_manager: Arc, pub ws_manager: Arc, pub jwt_manager: Arc, pub permission_service: Arc, } ``` ❌ **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.