EduLab / documentation /MESSAGING_SYSTEM.md
rinogeek's picture
Initial deploy to Hugging Face
062d102

💬 Système de Messagerie - Documentation Technique

Développé par Marino ATOHOUN pour Hypee


✅ État du Système

Fonctionnalité Statut Détails
API Backend ✅ Prêt CRUD Conversations, Messages, Pièces jointes
Frontend UI ✅ Prêt Interface Chat complète, Responsive
Temps Réel ✅ Prêt WebSockets via Django Channels
Fichiers ⚠️ Partiel Simulation (Data URL). Nécessite S3 pour prod.
Notifications ⏳ En cours Backend prêt, Frontend à connecter

🔄 Flux de Données Temps Réel

  1. Connexion

    • Le client initie une connexion WebSocket : ws://host:8000/ws/chat/{id}/?token={access_token}
    • JwtAuthMiddleware valide le token et identifie l'utilisateur.
    • ChatConsumer ajoute l'utilisateur au groupe chat_{id}.
  2. Envoi de Message

    • Le client fait un POST sur l'API /api/conversations/{id}/send_message/.
    • ConversationViewSet sauvegarde le message en base de données.
    • ConversationViewSet envoie un signal au groupe Channels.
    • ChatConsumer diffuse le message à tous les clients connectés via WebSocket.
  3. Réception

    • Le client reçoit l'événement chat_message.
    • React met à jour le state messages et conversations.

🛠 Configuration Technique

Backend

  • Channels Layer : InMemoryChannelLayer (Développement) / Redis (Production)
  • Auth : Custom JWT Middleware (Query Param)
  • Routing : ws/chat/<conversation_id>/

Frontend

  • Service : messagingService.connectToChat()
  • Gestion : useEffect dans Chat.tsx gère le cycle de vie de la connexion.
  • Doublons : Vérification des IDs pour éviter d'afficher deux fois le même message (API response + WS event).

⚠️ Notes Importantes

  1. Redémarrage Serveur : Après modification des fichiers Python (surtout asgi.py et settings.py), le serveur de développement Django redémarre automatiquement, mais il peut être nécessaire de le relancer manuellement si les WebSockets ne connectent pas.
  2. Redis : Pour passer en production, décommenter la configuration Redis dans settings.py et installer un serveur Redis.
  3. HTTPS : En production, assurez-vous d'utiliser wss:// (géré automatiquement par le service frontend).

Développé avec ❤️ par l'équipe Hypee