Archivés dans docs/archive/ : - TACHES_70_TRAITEES.md, TACHES_RESTANTES_SOURCE.md (historique mars 2026) - TESTS_UNITAIRES_PROGRESS.md (progression ancienne) - TASK_5_COMPLETION_REPORT.md, TASK_6_WEBSOCKET_COMPLETION_REPORT.md (rapports figés) Fix : communication/README.md → lien vers AUDIT_METIER_COMPLET.md (cassé) remplacé par lien vers constitution.md (existant)
Feature Communication/Messaging
Status: ✅ Implémenté (MVP Fonctionnel) Date: 2026-03-13 Priorité: P0 (Bloquant Production)
📋 Vue d'ensemble
Module de communication permettant la messagerie entre membres et les broadcasts organisation selon les permissions RBAC.
🎯 Fonctionnalités Implémentées
✅ MVP (V1.0)
-
Liste des Conversations
- Affichage conversations triées par date
- Badge compteur messages non lus
- Indicateurs visuels (pinned, muted)
- Pull-to-refresh
- Navigation vers détail conversation
-
Permissions Respectées
COMM_SEND_ALL- OrgAdmin, SuperAdminCOMM_SEND_MEMBERS- ModeratorCOMM_BROADCAST- OrgAdmin- Menu "Messages" visible selon rôle (OrgAdmin, SuperAdmin, Moderator)
-
Architecture Clean + BLoC
- Domain : Entities (Message, Conversation, MessageTemplate)
- Data : Models avec JSON serialization, Repository, Datasource
- Presentation : BLoC (Events, States), Pages, Widgets
-
Intégration App
- Routes :
/messages,/communication - Navigation : Menu "Plus" avec vérification permissions
- DI : Injectable + GetIt
- Routes :
🏗️ Architecture
communication/
├── domain/
│ ├── entities/
│ │ ├── message.dart (Message, MessageType, MessageStatus, MessagePriority)
│ │ ├── conversation.dart (Conversation, ConversationType)
│ │ └── message_template.dart (MessageTemplate, TemplateCategory)
│ ├── repositories/
│ │ └── messaging_repository.dart (interface)
│ └── usecases/
│ ├── get_conversations.dart
│ ├── get_messages.dart
│ ├── send_message.dart
│ └── send_broadcast.dart
├── data/
│ ├── models/
│ │ ├── message_model.dart (.g.dart généré)
│ │ └── conversation_model.dart (.g.dart généré)
│ ├── datasources/
│ │ └── messaging_remote_datasource.dart (API REST)
│ └── repositories/
│ └── messaging_repository_impl.dart
└── presentation/
├── bloc/
│ ├── messaging_event.dart
│ ├── messaging_state.dart
│ └── messaging_bloc.dart
├── pages/
│ └── conversations_page.dart
└── widgets/
└── conversation_tile.dart
📡 API Endpoints Utilisés
| Endpoint | Méthode | Description |
|---|---|---|
/api/messaging/conversations |
GET | Liste conversations |
/api/messaging/conversations/:id |
GET | Détail conversation |
/api/messaging/conversations |
POST | Créer conversation |
/api/messaging/conversations/:id/messages |
GET | Messages d'une conversation |
/api/messaging/conversations/:id/messages |
POST | Envoyer message |
/api/messaging/broadcast |
POST | Envoyer broadcast |
/api/messaging/messages/:id/read |
PUT | Marquer message lu |
/api/messaging/unread/count |
GET | Compteur non lus |
⚠️ Note: Backend endpoints à implémenter côté serveur Quarkus
🔄 États BLoC
MessagingInitial- État initialMessagingLoading- Chargement en coursConversationsLoaded- Conversations chargées avec compteur non lusMessagesLoaded- Messages d'une conversation chargésMessageSent- Message envoyé avec succèsBroadcastSent- Broadcast envoyé avec succèsMessagingError- Erreur avec message utilisateur
🚀 Prochaines Étapes (V2.0+)
P1 - Fonctionnalités Avancées
- Page détail conversation (chat thread)
- Envoi pièces jointes (images, documents)
- Édition/suppression messages
- Recherche dans conversations
- Filtres conversations (non lus, pinned, archivées)
- Templates messages personnalisables (CRUD)
- Messages ciblés par rôles (COMM_TARGETED)
- Modération messages (MODERATION_CONTENT)
- Statistiques communication (dashboard analytics)
P2 - Optimisations
- WebSocket temps réel pour nouveaux messages
- Cache local conversations récentes
- Pagination messages (infinite scroll)
- Compression images avant envoi
- Mode offline avec synchronisation
- Notifications push (FCM)
- Read receipts (accusés de lecture)
- Typing indicators (en train d'écrire)
🧪 Tests
À Implémenter
- Unit tests BLoC (bloc_test)
- Unit tests UseCases (mockito)
- Unit tests Repository (mockito)
- Widget tests ConversationsPage
- Integration tests flux complet
📝 Notes Techniques
JSON Serialization
Le champ lastMessage dans Conversation utilise une sérialisation custom car Message est un type nested :
@JsonKey(
fromJson: _messageFromJson,
toJson: _messageToJson,
)
final Message? lastMessage;
Gestion d'Erreurs
Toutes les méthodes repository retournent Either<Failure, T> pour une gestion fonctionnelle des erreurs :
NetworkFailure- Pas de connexion InternetUnauthorizedFailure- Token expiré (401)ForbiddenFailure- Permission insuffisante (403)NotFoundFailure- Ressource non trouvée (404)ServerFailure- Erreur serveur (5xx)ValidationFailure- Données invalidesUnexpectedFailure- Erreur inattendueNotImplementedFailure- Fonctionnalité en développement
Dépendances Externes
Module RegisterModule enregistre :
http.Clientpour requêtes HTTPFlutterSecureStoragepour tokensConnectivitypour état réseau
📚 Documentation Connexe
✅ Critères d'Acceptation
- Architecture Clean + BLoC respectée
- Permissions RBAC vérifiées (OrgAdmin, SuperAdmin, Moderator)
- Routes intégrées (/messages, /communication)
- Menu navigation avec vérification rôles
- Page liste conversations fonctionnelle
- Gestion erreurs complète (Failures)
- DI configuré (Injectable + GetIt)
- JSON serialization (.g.dart générés)
- Code compilable sans erreurs
- Backend endpoints implémentés (Quarkus)
- Tests unitaires BLoC
- Tests intégration E2E
Développé avec: Flutter 3.5.3+, Dart 3.x, BLoC 8.1.6, Clean Architecture Gap comblé: Communication/Messaging (P0 Bloquant Production)