# Module Chat Autonome pour GEOSECTOR ## Description Module de chat **totalement autonome et portable** pour l'application GEOSECTOR. - **100% indépendant** : Peut être réutilisé dans n'importe quelle application Flutter - **API REST uniquement** : Plus de dépendance MQTT - **Architecture simple** : Code maintenable et facilement compréhensible - **Cache local Hive** : Fonctionnement offline avec synchronisation automatique - **Gestion des rôles** : Permissions configurables via YAML - **Autocomplete intelligent** : Sélection des destinataires selon les permissions ## Architecture simplifiée ### Structure minimale ``` lib/chat/ ├── models/ # 2 modèles simples │ ├── room.dart │ └── message.dart ├── services/ # Services de gestion │ ├── chat_service.dart # Service principal │ └── chat_config_loader.dart # Chargeur de configuration ├── widgets/ # Composants réutilisables │ └── recipient_selector.dart # Sélecteur de destinataires ├── pages/ # 2 pages essentielles │ ├── rooms_page.dart │ └── chat_page.dart ├── chat_config.yaml # Configuration des permissions └── chat_module.dart # Point d'entrée ``` ## Intégration dans votre application ### 1. Installation ```yaml # pubspec.yaml dependencies: dio: ^5.4.0 hive: ^2.2.3 hive_flutter: ^1.1.0 yaml: ^3.1.2 ``` ### 2. Initialisation ```dart await ChatModule.init( apiUrl: 'https://api.geosector.fr', userId: currentUser.id, userName: currentUser.name, userRole: currentUser.fkRole, // 1, 2 ou 9 userEntite: currentUser.entiteId, // ID de l'amicale authToken: authToken, // Optionnel ); ``` ### 3. Utilisation ```dart // Ouvrir le chat ChatModule.openChat(context); // Ou obtenir directement une page Navigator.push( context, MaterialPageRoute( builder: (_) => ChatModule.getRoomsPage(), ), ); ``` ## Gestion des permissions par rôle ### Configuration (chat_config.yaml) Les permissions sont définies dans un fichier YAML facilement modifiable : #### Rôle 1 (Membre) - Peut discuter avec les membres de son amicale (rôle 1) - Peut discuter avec l'admin de son amicale (rôle 2) - Restriction : même entité uniquement #### Rôle 2 (Admin Amicale) - Peut discuter avec tous les membres de son amicale - Peut discuter avec les superadmins (rôle 9) - Peut créer des groupes de discussion #### Rôle 9 (Super Admin) - Peut envoyer des messages à tous les admins d'amicale - Peut sélectionner des destinataires spécifiques - Peut faire du broadcast à tous les admins ## API Backend requise ### Endpoints REST - `GET /api/chat/rooms` - Liste des conversations filtrées par rôle - `POST /api/chat/rooms` - Créer une conversation avec vérification des permissions - `GET /api/chat/rooms/{id}/messages` - Messages d'une conversation - `POST /api/chat/rooms/{id}/messages` - Envoyer un message - `POST /api/chat/rooms/{id}/read` - Marquer comme lu - `GET /api/chat/recipients` - Liste des destinataires possibles selon le rôle ### Structure base de données ```sql -- Tables préfixées "chat_" CREATE TABLE chat_rooms ( id VARCHAR(36) PRIMARY KEY, title VARCHAR(255), type ENUM('private', 'group', 'broadcast'), created_at TIMESTAMP, created_by INT ); CREATE TABLE chat_messages ( id VARCHAR(36) PRIMARY KEY, room_id VARCHAR(36), content TEXT, sender_id INT, sent_at TIMESTAMP, FOREIGN KEY (room_id) REFERENCES chat_rooms(id) ); CREATE TABLE chat_participants ( room_id VARCHAR(36), user_id INT, role INT, entite_id INT, joined_at TIMESTAMP, PRIMARY KEY (room_id, user_id) ); CREATE TABLE chat_read_receipts ( message_id VARCHAR(36), user_id INT, read_at TIMESTAMP, PRIMARY KEY (message_id, user_id) ); ``` ## Stockage local Hive ### TypeIds réservés - TypeId 50: Room - TypeId 51: Message - TypeIds 52-60: Réservés pour extensions futures ### Boxes Hive - `chat_rooms`: Conversations en cache - `chat_messages`: Messages en cache ## Interface utilisateur ### Design minimaliste et professionnel - Palette de couleurs sobre (blanc, gris, bleu accent) - Pas d'animations superflues - Focus sur la lisibilité et l'efficacité - Interface responsive pour toutes les plateformes ### Composants principaux 1. **Liste des conversations** : Vue simple avec badges non-lus 2. **Page de chat** : Messages avec bulles, input simple 3. **Sélecteur de destinataires** : Autocomplete avec filtrage par rôle ## Planning de développement (2 sessions) ### Session 1 : Architecture de base ✅ - [x] Nettoyage et suppression du MQTT - [x] Création des modèles simples (Room, Message) - [x] Service unique ChatService - [x] Pages minimales (RoomsPage, ChatPage) - [x] Module d'entrée ChatModule - [x] Gestion des rôles et permissions via YAML - [x] Widget autocomplete pour sélection des destinataires - [x] Adaptation de l'UI selon les permissions ### Session 2 : Finalisation - [ ] Tests d'intégration avec l'API - [ ] Documentation API complète - [ ] Optimisations performances - [ ] Gestion erreurs robuste ## Points d'attention ### Sécurité - Authentification via token JWT - Vérification des permissions côté serveur - Validation des inputs ### Performance - Cache Hive pour mode offline - Pagination des messages - Lazy loading des conversations ### Maintenance - Code simple et documenté - Architecture modulaire - Configuration externalisée (YAML) ## Support Pour toute question ou problème, consulter la documentation principale de l'application GEOSECTOR.