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.).
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 :
TypingIndicatorManagerexiste 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 userget_typing_users(conversation_id)— liste les users actifs (filtre les expirés)cleanup_expired()— nettoie les entrées expirées
❌ Manques identifiés :
- Pas de task de monitoring automatique :
cleanup_expired()existe mais n'est jamais appelée automatiquement - Pas de broadcast automatique : le manager ne déclenche pas de broadcast quand un timeout expire
- Pas intégré dans WebSocketState : le manager n'est pas instancié dans
WebSocketState - 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 toujoursSentsi 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_receiptsexiste pour les messages lus
2.3. Manager dédié
❌ DeliveredStatusManager : N'EXISTE PAS
ReadReceiptManagergè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 :
MarkAsReadutilise déjàcan_mark_read()SendMessageutilise 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
ReadReceiptManagerest instancié (ligne 147)PermissionServiceest instancié (ligne 148)TypingIndicatorManagern'est pas instanciéDeliveredStatusManagern'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
Deliveredexiste 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
- Créer migration SQL pour
delivered_status - Créer
src/delivered_status.rsavecDeliveredStatusManager - Améliorer
TypingIndicatorManageravec task de monitoring
Phase 2 : WebSocket Messages
- Ajouter
IncomingMessage::TypingetIncomingMessage::Delivered - Ajouter
OutgoingMessage::UserTypingetOutgoingMessage::MessageDelivered
Phase 3 : Intégration
- Ajouter managers dans
WebSocketState - Brancher handlers dans
handle_incoming_message() - Démarrer task de monitoring typing dans
main.rs
Phase 4 : Tests & Documentation
- Tests unitaires
- Tests d'intégration
- Documentation complète
Prochaine étape : Implémentation selon le design cible.