veza/veza-chat-server/docs/AUDIT_DELIVERED_TYPING.md
okinrev b7955a680c 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

5 KiB

🔍 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 :

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

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

  1. Ajouter IncomingMessage::Typing et IncomingMessage::Delivered
  2. Ajouter OutgoingMessage::UserTyping et OutgoingMessage::MessageDelivered

Phase 3 : Intégration

  1. Ajouter managers dans WebSocketState
  2. Brancher handlers dans handle_incoming_message()
  3. Démarrer task de monitoring typing dans main.rs

Phase 4 : Tests & Documentation

  1. Tests unitaires
  2. Tests d'intégration
  3. Documentation complète

Prochaine étape : Implémentation selon le design cible.