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>
This commit is contained in:
@@ -1,82 +1,198 @@
|
||||
# Module Chat GEOSECTOR
|
||||
# Module Chat Autonome pour GEOSECTOR
|
||||
|
||||
## Structure du module
|
||||
## 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
|
||||
|
||||
Le module chat est organisé selon une architecture modulaire respectant la séparation des préoccupations :
|
||||
## Architecture simplifiée
|
||||
|
||||
### Structure minimale
|
||||
```
|
||||
lib/chat/
|
||||
├── models/ # Modèles de données
|
||||
│ ├── conversation_model.dart
|
||||
│ ├── message_model.dart
|
||||
│ ├── participant_model.dart
|
||||
│ └── audience_target_model.dart
|
||||
├── repositories/ # Gestion des données
|
||||
│ └── chat_repository.dart
|
||||
├── services/ # Services techniques
|
||||
│ ├── chat_api_service.dart
|
||||
│ └── offline_queue_service.dart
|
||||
├── widgets/ # Composants UI
|
||||
│ ├── chat_screen.dart
|
||||
│ ├── conversations_list.dart
|
||||
│ ├── message_bubble.dart
|
||||
│ └── chat_input.dart
|
||||
├── pages/ # Pages de l'application
|
||||
├── 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.dart # Point d'entrée avec exports
|
||||
└── README.md # Documentation du module
|
||||
├── chat_config.yaml # Configuration des permissions
|
||||
└── chat_module.dart # Point d'entrée
|
||||
```
|
||||
|
||||
## Fonctionnalités principales
|
||||
## Intégration dans votre application
|
||||
|
||||
1. **Conversations** : Support des conversations one-to-one, groupes et annonces
|
||||
2. **Messages** : Envoi/réception de messages texte et pièces jointes
|
||||
3. **Participants** : Gestion des participants aux conversations
|
||||
4. **Annonces** : Diffusion de messages à des groupes spécifiques
|
||||
5. **Mode hors ligne** : File d'attente pour la synchronisation des données
|
||||
|
||||
## Utilisation
|
||||
|
||||
### Importation
|
||||
|
||||
```dart
|
||||
import 'package:geosector/chat/chat.dart';
|
||||
### 1. Installation
|
||||
```yaml
|
||||
# pubspec.yaml
|
||||
dependencies:
|
||||
dio: ^5.4.0
|
||||
hive: ^2.2.3
|
||||
hive_flutter: ^1.1.0
|
||||
yaml: ^3.1.2
|
||||
```
|
||||
|
||||
### Affichage de la page chat
|
||||
|
||||
### 2. Initialisation
|
||||
```dart
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => const ChatPage()),
|
||||
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
|
||||
);
|
||||
```
|
||||
|
||||
### Création d'une conversation
|
||||
|
||||
### 3. Utilisation
|
||||
```dart
|
||||
final chatRepository = ChatRepository();
|
||||
final conversation = await chatRepository.createConversation({
|
||||
'type': 'one_to_one',
|
||||
'participants': [userId1, userId2],
|
||||
});
|
||||
// Ouvrir le chat
|
||||
ChatModule.openChat(context);
|
||||
|
||||
// Ou obtenir directement une page
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (_) => ChatModule.getRoomsPage(),
|
||||
),
|
||||
);
|
||||
```
|
||||
|
||||
## États d'implémentation
|
||||
## Gestion des permissions par rôle
|
||||
|
||||
- [x] Structure de base
|
||||
- [ ] Modèles de données complets
|
||||
- [ ] Intégration avec Hive
|
||||
- [ ] Services API
|
||||
- [ ] Gestion hors ligne
|
||||
- [ ] Widgets visuels
|
||||
- [ ] Tests unitaires
|
||||
### Configuration (chat_config.yaml)
|
||||
Les permissions sont définies dans un fichier YAML facilement modifiable :
|
||||
|
||||
## À faire
|
||||
#### 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
|
||||
|
||||
1. Compléter l'implémentation des modèles avec les adaptateurs Hive
|
||||
2. Implémenter les méthodes dans les services et repositories
|
||||
3. Créer les widgets visuels avec le design approprié
|
||||
4. Ajouter les adaptateurs Hive pour le stockage local
|
||||
5. Implémenter la gestion des pièces jointes
|
||||
6. Ajouter les tests unitaires
|
||||
#### 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.
|
||||
Reference in New Issue
Block a user