149 lines
3.8 KiB
Dart
149 lines
3.8 KiB
Dart
import '../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, stackTrace) {
|
|
_errorService.logError(
|
|
'message_service.dart',
|
|
'Erreur lors de l\'envoi du message: $e',
|
|
stackTrace,
|
|
);
|
|
throw Exception('Impossible d\'envoyer le message');
|
|
}
|
|
}
|
|
|
|
// Stream des messages
|
|
Stream<List<Message>> getMessagesStream(String groupId) {
|
|
try {
|
|
return _messageRepository.getMessagesStream(groupId);
|
|
} catch (e, stackTrace) {
|
|
_errorService.logError(
|
|
'message_service.dart',
|
|
'Erreur lors de la récupération des messages: $e',
|
|
stackTrace,
|
|
);
|
|
throw Exception('Impossible de récupérer les messages');
|
|
}
|
|
}
|
|
|
|
// Supprimer un message
|
|
Future<void> deleteMessage({
|
|
required String groupId,
|
|
required String messageId,
|
|
}) async {
|
|
try {
|
|
await _messageRepository.deleteMessage(
|
|
groupId: groupId,
|
|
messageId: messageId,
|
|
);
|
|
} catch (e, stackTrace) {
|
|
_errorService.logError(
|
|
'message_service.dart',
|
|
'Erreur lors de la suppression du message: $e',
|
|
stackTrace,
|
|
);
|
|
throw Exception('Impossible de supprimer le message');
|
|
}
|
|
}
|
|
|
|
// 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, stackTrace) {
|
|
_errorService.logError(
|
|
'message_service.dart',
|
|
'Erreur lors de la modification du message: $e',
|
|
stackTrace,
|
|
);
|
|
throw Exception('Impossible de modifier le message');
|
|
}
|
|
}
|
|
|
|
// 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, stackTrace) {
|
|
_errorService.logError(
|
|
'message_service.dart',
|
|
'Erreur lors de l\'ajout de la réaction: $e',
|
|
stackTrace,
|
|
);
|
|
throw Exception('Impossible d\'ajouter la réaction');
|
|
}
|
|
}
|
|
|
|
// 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, stackTrace) {
|
|
_errorService.logError(
|
|
'message_service.dart',
|
|
'Erreur lors de la suppression de la réaction: $e',
|
|
stackTrace,
|
|
);
|
|
throw Exception('Impossible de supprimer la réaction');
|
|
}
|
|
}
|
|
}
|