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.)
88 lines
3.3 KiB
Dart
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,
|
|
});
|
|
}
|