feat: Implement message management features including sending, deleting, updating, and reacting to messages
This commit is contained in:
108
lib/repositories/message_repository.dart
Normal file
108
lib/repositories/message_repository.dart
Normal file
@@ -0,0 +1,108 @@
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import '../data/models/message.dart';
|
||||
|
||||
class MessageRepository {
|
||||
final FirebaseFirestore _firestore;
|
||||
|
||||
MessageRepository({FirebaseFirestore? firestore})
|
||||
: _firestore = firestore ?? FirebaseFirestore.instance;
|
||||
|
||||
// Envoyer un message
|
||||
Future<void> sendMessage({
|
||||
required String groupId,
|
||||
required String text,
|
||||
required String senderId,
|
||||
required String senderName,
|
||||
}) async {
|
||||
final message = {
|
||||
'text': text,
|
||||
'senderId': senderId,
|
||||
'senderName': senderName,
|
||||
'timestamp': FieldValue.serverTimestamp(),
|
||||
'groupId': groupId,
|
||||
};
|
||||
|
||||
await _firestore
|
||||
.collection('groups')
|
||||
.doc(groupId)
|
||||
.collection('messages')
|
||||
.add(message);
|
||||
}
|
||||
|
||||
// Stream des messages
|
||||
Stream<List<Message>> getMessagesStream(String groupId) {
|
||||
return _firestore
|
||||
.collection('groups')
|
||||
.doc(groupId)
|
||||
.collection('messages')
|
||||
.orderBy('timestamp', descending: false)
|
||||
.snapshots()
|
||||
.map((snapshot) {
|
||||
return snapshot.docs.map((doc) => Message.fromFirestore(doc)).toList();
|
||||
});
|
||||
}
|
||||
|
||||
// Supprimer un message
|
||||
Future<void> deleteMessage({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
}) async {
|
||||
await _firestore
|
||||
.collection('groups')
|
||||
.doc(groupId)
|
||||
.collection('messages')
|
||||
.doc(messageId)
|
||||
.delete();
|
||||
}
|
||||
|
||||
// Modifier un message
|
||||
Future<void> updateMessage({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
required String newText,
|
||||
}) async {
|
||||
await _firestore
|
||||
.collection('groups')
|
||||
.doc(groupId)
|
||||
.collection('messages')
|
||||
.doc(messageId)
|
||||
.update({
|
||||
'text': newText,
|
||||
'editedAt': FieldValue.serverTimestamp(),
|
||||
'isEdited': true,
|
||||
});
|
||||
}
|
||||
|
||||
// Ajouter une réaction
|
||||
Future<void> reactToMessage({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
required String userId,
|
||||
required String reaction,
|
||||
}) async {
|
||||
await _firestore
|
||||
.collection('groups')
|
||||
.doc(groupId)
|
||||
.collection('messages')
|
||||
.doc(messageId)
|
||||
.update({
|
||||
'reactions.$userId': reaction,
|
||||
});
|
||||
}
|
||||
|
||||
// Supprimer une réaction
|
||||
Future<void> removeReaction({
|
||||
required String groupId,
|
||||
required String messageId,
|
||||
required String userId,
|
||||
}) async {
|
||||
await _firestore
|
||||
.collection('groups')
|
||||
.doc(groupId)
|
||||
.collection('messages')
|
||||
.doc(messageId)
|
||||
.update({
|
||||
'reactions.$userId': FieldValue.delete(),
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user