✨ 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>
198 lines
5.5 KiB
Markdown
Executable File
198 lines
5.5 KiB
Markdown
Executable File
# 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. |