Files
unionflow-mobile-apps/lib/features/communication/domain/repositories/messaging_repository.dart
dahoud 45dcd2171e feat(communication): module messagerie unifié + contact policies + blocages
Aligné avec le backend MessagingResource :
- Nouveau module communication (conversations, messages, participants)
- Respect des ContactPolicy (qui peut parler à qui par rôle)
- Gestion MemberBlock (blocages individuels)
- UI : conversations list, conversation detail, broadcast, tiles
- BLoC : MessagingBloc avec events (envoyer, démarrer conversation rôle, etc.)
2026-04-15 20:26:35 +00:00

88 lines
3.3 KiB
Dart

/// Repository interface pour la messagerie v4
///
/// Contrat de données aligné sur l'API backend v4 (/api/messagerie/*)
library messaging_repository;
import '../entities/conversation.dart';
import '../entities/message.dart';
import '../entities/contact_policy.dart';
/// Interface du repository de messagerie
abstract class MessagingRepository {
// ── Conversations ─────────────────────────────────────────────────────────
/// Récupère les conversations résumées de l'utilisateur connecté
Future<List<ConversationSummary>> getMesConversations();
/// Récupère la conversation complète (avec participants et messages)
Future<Conversation> getConversation(String conversationId);
/// Démarre une conversation directe avec un membre
Future<Conversation> demarrerConversationDirecte({
required String destinataireId,
required String organisationId,
String? premierMessage,
});
/// Démarre un canal de communication avec un rôle officiel
Future<Conversation> demarrerConversationRole({
required String roleCible,
required String organisationId,
String? premierMessage,
});
/// Archive une conversation
Future<void> archiverConversation(String conversationId);
// ── Messages ──────────────────────────────────────────────────────────────
/// Envoie un message dans une conversation
Future<Message> envoyerMessage(
String conversationId, {
required String typeMessage,
String? contenu,
String? urlFichier,
int? dureeAudio,
String? messageParentId,
});
/// Récupère l'historique des messages (paginé)
Future<List<Message>> getMessages(String conversationId, {int page = 0});
/// Marque tous les messages d'une conversation comme lus
Future<void> marquerLu(String conversationId);
/// Supprime un message (soft-delete)
Future<void> supprimerMessage(String conversationId, String messageId);
// ── Blocages ──────────────────────────────────────────────────────────────
/// Bloque un membre
Future<void> bloquerMembre({
required String membreABloquerId,
String? organisationId,
String? raison,
});
/// Débloque un membre
Future<void> debloquerMembre(String membreId, {String? organisationId});
/// Récupère la liste des membres bloqués
Future<List<Map<String, dynamic>>> getMesBlocages();
// ── Politique de communication ────────────────────────────────────────────
/// Récupère la politique de communication d'une organisation
Future<ContactPolicy> getPolitique(String organisationId);
/// Met à jour la politique de communication (ADMIN seulement)
Future<ContactPolicy> mettreAJourPolitique(
String organisationId, {
required String typePolitique,
required bool autoriserMembreVersMembre,
required bool autoriserMembreVersRole,
required bool autoriserNotesVocales,
});
}