deleteMessage method

Future<void> deleteMessage(
  1. String chatId,
  2. String messageId
)

Delete a message and its associated media (if any)

Implementation

Future<void> deleteMessage(String chatId, String messageId) async {
  try {
    DocumentReference messageRef = _firestore
        .collection('chats')
        .doc(chatId)
        .collection('messages')
        .doc(messageId);

    DocumentSnapshot messageSnapshot = await messageRef.get();

    if (messageSnapshot.exists) {
      Message message =
          Message.fromMap(messageSnapshot.data() as Map<String, dynamic>);

      // If the message has a media URL, delete the media file
      if (message.mediaUrl != null && message.mediaUrl!.isNotEmpty) {
        await _storageService.deleteMedia(message.mediaUrl!);
      }
      _firestore.collection('chats').doc(chatId).set({
        'lastMessage': 'deleted',
        'lastMessageType': MessageType.text.toString(),
        'lastMessageTime': FieldValue.serverTimestamp(),
        'lastMessageSender': message.senderId, // Store sender's ID
        'users': [message.senderId, message.receiverId],
        'unreadMessageCount': {
          '${message.receiverId}': FieldValue.increment(1)
        },
      }, SetOptions(merge: true));
      // Delete the message from Firestore
      await messageRef.update({
        'isDeleted': true,
      });
      // Update chat summary
    }
  } catch (e) {
    print('Error deleting message: $e');
  }
}