Files
geo/app/lib/chat
Pierre 5ab03751e1 feat: Release version 3.1.4 - Mode terrain et génération PDF
 Nouvelles fonctionnalités:
- Ajout du mode terrain pour utilisation mobile hors connexion
- Génération automatique de reçus PDF avec template personnalisé
- Révision complète du système de cartes avec amélioration des performances

🔧 Améliorations techniques:
- Refactoring du module chat avec architecture simplifiée
- Optimisation du système de sécurité NIST SP 800-63B
- Amélioration de la gestion des secteurs géographiques
- Support UTF-8 étendu pour les noms d'utilisateurs

📱 Application mobile:
- Nouveau mode terrain dans user_field_mode_page
- Interface utilisateur adaptative pour conditions difficiles
- Synchronisation offline améliorée

🗺️ Cartographie:
- Optimisation des performances MapBox
- Meilleure gestion des tuiles hors ligne
- Amélioration de l'affichage des secteurs

📄 Documentation:
- Ajout guide Android (ANDROID-GUIDE.md)
- Documentation sécurité API (API-SECURITY.md)
- Guide module chat (CHAT_MODULE.md)

🐛 Corrections:
- Résolution des erreurs 400 lors de la création d'utilisateurs
- Correction de la validation des noms d'utilisateurs
- Fix des problèmes de synchronisation chat

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-19 19:38:03 +02:00
..

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ô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

-- 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

  • 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.