# 💬 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//` ### 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**