/// Repository interface pour la communication /// /// Contrat de données pour les messages, conversations et templates library messaging_repository; import 'package:dartz/dartz.dart'; import '../../../../core/error/failures.dart'; import '../entities/message.dart'; import '../entities/conversation.dart'; import '../entities/message_template.dart'; /// Interface du repository de messagerie abstract class MessagingRepository { // === CONVERSATIONS === /// Récupère toutes les conversations de l'utilisateur Future>> getConversations({ String? organizationId, bool includeArchived = false, }); /// Récupère une conversation par son ID Future> getConversationById(String conversationId); /// Crée une nouvelle conversation Future> createConversation({ required String name, required List participantIds, String? organizationId, String? description, }); /// Archive une conversation Future> archiveConversation(String conversationId); /// Marque une conversation comme lue Future> markConversationAsRead(String conversationId); /// Mute/démute une conversation Future> toggleMuteConversation(String conversationId); /// Pin/unpin une conversation Future> togglePinConversation(String conversationId); // === MESSAGES === /// Récupère les messages d'une conversation Future>> getMessages({ required String conversationId, int? limit, String? beforeMessageId, }); /// Envoie un message individuel Future> sendMessage({ required String conversationId, required String content, List? attachments, MessagePriority priority = MessagePriority.normal, }); /// Envoie un broadcast à toute l'organisation Future> sendBroadcast({ required String organizationId, required String subject, required String content, MessagePriority priority = MessagePriority.normal, List? attachments, }); /// Envoie un message ciblé par rôles Future> sendTargetedMessage({ required String organizationId, required List targetRoles, required String subject, required String content, MessagePriority priority = MessagePriority.normal, }); /// Marque un message comme lu Future> markMessageAsRead(String messageId); /// Édite un message Future> editMessage({ required String messageId, required String newContent, }); /// Supprime un message Future> deleteMessage(String messageId); // === TEMPLATES === /// Récupère tous les templates disponibles Future>> getTemplates({ String? organizationId, TemplateCategory? category, }); /// Récupère un template par son ID Future> getTemplateById(String templateId); /// Crée un nouveau template Future> createTemplate({ required String name, required String description, required TemplateCategory category, required String subject, required String body, List>? variables, String? organizationId, }); /// Met à jour un template Future> updateTemplate({ required String templateId, String? name, String? description, String? subject, String? body, bool? isActive, }); /// Supprime un template Future> deleteTemplate(String templateId); /// Envoie un message à partir d'un template Future> sendFromTemplate({ required String templateId, required Map variables, required List recipientIds, }); // === STATISTIQUES === /// Récupère le nombre de messages non lus Future> getUnreadCount({String? organizationId}); /// Récupère les statistiques de communication Future>> getMessagingStats({ required String organizationId, DateTime? startDate, DateTime? endDate, }); }