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
# pubspec.yaml
dependencies:
dio: ^5.4.0
hive: ^2.2.3
hive_flutter: ^1.1.0
yaml: ^3.1.2
2. Initialisation
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
// 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ôlePOST /api/chat/rooms- Créer une conversation avec vérification des permissionsGET /api/chat/rooms/{id}/messages- Messages d'une conversationPOST /api/chat/rooms/{id}/messages- Envoyer un messagePOST /api/chat/rooms/{id}/read- Marquer comme luGET /api/chat/recipients- Liste des destinataires possibles selon le rôle
Structure base de données
-- 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 cachechat_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
- Liste des conversations : Vue simple avec badges non-lus
- Page de chat : Messages avec bulles, input simple
- Sélecteur de destinataires : Autocomplete avec filtrage par rôle
Planning de développement (2 sessions)
Session 1 : Architecture de base ✅
- Nettoyage et suppression du MQTT
- Création des modèles simples (Room, Message)
- Service unique ChatService
- Pages minimales (RoomsPage, ChatPage)
- Module d'entrée ChatModule
- Gestion des rôles et permissions via YAML
- Widget autocomplete pour sélection des destinataires
- 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.