feat: Implement message management features including sending, deleting, updating, and reacting to messages
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
import '../data/models/message.dart';
|
||||
import '../repositories/message_repository.dart';
|
||||
import 'error_service.dart';
|
||||
|
||||
class MessageService {
|
||||
final MessageRepository _messageRepository;
|
||||
final ErrorService _errorService;
|
||||
|
||||
MessageService({
|
||||
required MessageRepository messageRepository,
|
||||
ErrorService? errorService,
|
||||
}) : _messageRepository = messageRepository,
|
||||
_errorService = errorService ?? ErrorService();
|
||||
|
||||
// Envoyer un message
|
||||
Future<void> sendMessage({
|
||||
required String groupId,
|
||||
required String text,
|
||||
required String senderId,
|
||||
required String senderName,
|
||||
}) async {
|
||||
try {
|
||||
if (text.trim().isEmpty) {
|
||||
throw Exception('Le message ne peut pas être vide');
|
||||
}
|
||||
|
||||
await _messageRepository.sendMessage(
|
||||
groupId: groupId,
|
||||
text: text.trim(),
|
||||
senderId: senderId,
|
||||
senderName: senderName,
|
||||
);
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'message_service.dart',
|
||||
'Erreur lors de l\'envoi du message: $e',
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Stream des messages
|
||||
Stream<List<Message>> getMessagesStream(String groupId) {
|
||||
try {
|
||||
return _messageRepository.getMessagesStream(groupId);
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'message_service.dart',
|
||||
'Erreur lors de la récupération des messages: $e',
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Supprimer un message
|
||||
Future<void> deleteMessage({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
}) async {
|
||||
try {
|
||||
await _messageRepository.deleteMessage(
|
||||
groupId: groupId,
|
||||
messageId: messageId,
|
||||
);
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'message_service.dart',
|
||||
'Erreur lors de la suppression du message: $e',
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Modifier un message
|
||||
Future<void> updateMessage({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
required String newText,
|
||||
}) async {
|
||||
try {
|
||||
if (newText.trim().isEmpty) {
|
||||
throw Exception('Le message ne peut pas être vide');
|
||||
}
|
||||
|
||||
await _messageRepository.updateMessage(
|
||||
groupId: groupId,
|
||||
messageId: messageId,
|
||||
newText: newText.trim(),
|
||||
);
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'message_service.dart',
|
||||
'Erreur lors de la modification du message: $e',
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Ajouter une réaction
|
||||
Future<void> reactToMessage({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
required String userId,
|
||||
required String reaction,
|
||||
}) async {
|
||||
try {
|
||||
await _messageRepository.reactToMessage(
|
||||
groupId: groupId,
|
||||
messageId: messageId,
|
||||
userId: userId,
|
||||
reaction: reaction,
|
||||
);
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'message_service.dart',
|
||||
'Erreur lors de l\'ajout de la réaction: $e',
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
// Supprimer une réaction
|
||||
Future<void> removeReaction({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
required String userId,
|
||||
}) async {
|
||||
try {
|
||||
await _messageRepository.removeReaction(
|
||||
groupId: groupId,
|
||||
messageId: messageId,
|
||||
userId: userId,
|
||||
);
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'message_service.dart',
|
||||
'Erreur lors de la suppression de la réaction: $e',
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user