Files
TravelMate/lib/services/message_service.dart
Dayron 4edbd1cf34 feat: Add User and UserBalance models with serialization methods
feat: Implement BalanceRepository for group balance calculations

feat: Create ExpenseRepository for managing expenses

feat: Add services for handling expenses and storage operations

fix: Update import paths for models in repositories and services

refactor: Rename CountContent to AccountContent in HomePage

chore: Add StorageService for image upload and management
2025-10-21 16:02:58 +02:00

143 lines
3.3 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) {
_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;
}
}
}