/// 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> getMesConversations(); /// Récupère la conversation complète (avec participants et messages) Future getConversation(String conversationId); /// Démarre une conversation directe avec un membre Future demarrerConversationDirecte({ required String destinataireId, required String organisationId, String? premierMessage, }); /// Démarre un canal de communication avec un rôle officiel Future demarrerConversationRole({ required String roleCible, required String organisationId, String? premierMessage, }); /// Archive une conversation Future archiverConversation(String conversationId); // ── Messages ────────────────────────────────────────────────────────────── /// Envoie un message dans une conversation Future envoyerMessage( String conversationId, { required String typeMessage, String? contenu, String? urlFichier, int? dureeAudio, String? messageParentId, }); /// Récupère l'historique des messages (paginé) Future> getMessages(String conversationId, {int page = 0}); /// Marque tous les messages d'une conversation comme lus Future marquerLu(String conversationId); /// Supprime un message (soft-delete) Future supprimerMessage(String conversationId, String messageId); // ── Blocages ────────────────────────────────────────────────────────────── /// Bloque un membre Future bloquerMembre({ required String membreABloquerId, String? organisationId, String? raison, }); /// Débloque un membre Future debloquerMembre(String membreId, {String? organisationId}); /// Récupère la liste des membres bloqués Future>> getMesBlocages(); // ── Politique de communication ──────────────────────────────────────────── /// Récupère la politique de communication d'une organisation Future getPolitique(String organisationId); /// Met à jour la politique de communication (ADMIN seulement) Future mettreAJourPolitique( String organisationId, { required String typePolitique, required bool autoriserMembreVersMembre, required bool autoriserMembreVersRole, required bool autoriserNotesVocales, }); }