💬 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
Connexion
- Le client initie une connexion WebSocket :
ws://host:8000/ws/chat/{id}/?token={access_token} JwtAuthMiddlewarevalide le token et identifie l'utilisateur.ChatConsumerajoute l'utilisateur au groupechat_{id}.
- Le client initie une connexion WebSocket :
Envoi de Message
- Le client fait un
POSTsur l'API/api/conversations/{id}/send_message/. ConversationViewSetsauvegarde le message en base de données.ConversationViewSetenvoie un signal au groupe Channels.ChatConsumerdiffuse le message à tous les clients connectés via WebSocket.
- Le client fait un
Réception
- Le client reçoit l'événement
chat_message. - React met à jour le state
messagesetconversations.
- Le client reçoit l'événement
🛠 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 :
useEffectdansChat.tsxgè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
- Redémarrage Serveur : Après modification des fichiers Python (surtout
asgi.pyetsettings.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. - Redis : Pour passer en production, décommenter la configuration Redis dans
settings.pyet installer un serveur Redis. - HTTPS : En production, assurez-vous d'utiliser
wss://(géré automatiquement par le service frontend).
Développé avec ❤️ par l'équipe Hypee