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

1. **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

2. **Permissions Respectées**
   - `COMM_SEND_ALL` - OrgAdmin, SuperAdmin
   - `COMM_SEND_MEMBERS` - Moderator
   - `COMM_BROADCAST` - OrgAdmin
   - Menu "Messages" visible selon rôle (OrgAdmin, SuperAdmin, Moderator)

3. **Architecture Clean + BLoC**
   - Domain : Entities (Message, Conversation, MessageTemplate)
   - Data : Models avec JSON serialization, Repository, Datasource
   - Presentation : BLoC (Events, States), Pages, Widgets

4. **Intégration App**
   - Routes : `/messages`, `/communication`
   - Navigation : Menu "Plus" avec vérification permissions
   - DI : Injectable + GetIt

## 🏗️ 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 initial
- `MessagingLoading` - Chargement en cours
- `ConversationsLoaded` - Conversations chargées avec compteur non lus
- `MessagesLoaded` - Messages d'une conversation chargés
- `MessageSent` - Message envoyé avec succès
- `BroadcastSent` - Broadcast envoyé avec succès
- `MessagingError` - 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 :

```dart
@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 Internet
- `UnauthorizedFailure` - Token expiré (401)
- `ForbiddenFailure` - Permission insuffisante (403)
- `NotFoundFailure` - Ressource non trouvée (404)
- `ServerFailure` - Erreur serveur (5xx)
- `ValidationFailure` - Données invalides
- `UnexpectedFailure` - Erreur inattendue
- `NotImplementedFailure` - Fonctionnalité en développement

### Dépendances Externes

Module `RegisterModule` enregistre :
- `http.Client` pour requêtes HTTP
- `FlutterSecureStorage` pour tokens
- `Connectivity` pour état réseau

## 📚 Documentation Connexe

- [Permission Matrix](../../features/authentication/data/models/permission_matrix.dart)
- [User Roles](../../features/authentication/data/models/user_role.dart)
- [API Design](../../specs/000-unionflow-baseline/spec.md)
- [Constitution UnionFlow](../../../../.specify/memory/constitution.md)

## ✅ Critères d'Acceptation

- [x] Architecture Clean + BLoC respectée
- [x] Permissions RBAC vérifiées (OrgAdmin, SuperAdmin, Moderator)
- [x] Routes intégrées (/messages, /communication)
- [x] Menu navigation avec vérification rôles
- [x] Page liste conversations fonctionnelle
- [x] Gestion erreurs complète (Failures)
- [x] DI configuré (Injectable + GetIt)
- [x] JSON serialization (.g.dart générés)
- [x] 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)
