sendMessage method

Future<void> sendMessage(
  1. Message message
)

Sends a new message and updates chat summary.

Implementation

Future<void> sendMessage(Message message) async {
  final chatId = getChatId(message.senderId, message.receiverId);
  DocumentReference messageRef = _firestore
      .collection('chats')
      .doc(chatId)
      .collection('messages')
      .doc(message.messageId);

  await messageRef.set(message.toMap(useCurrentTime: true));

  // Determine last message text based on type
  String lastMessageText = message.text.isNotEmpty
      ? message.text
      : (message.type == MessageType.image
          ? "šŸ“· Image"
          : message.type == MessageType.audio
              ? "šŸŽµ Audio"
              : message.type == MessageType.video
                  ? "šŸ“¹ Video"
                  : "šŸ“Ž File");

  // Update chat summary
  await _firestore.collection('chats').doc(chatId).set({
    'lastMessage': lastMessageText,
    'lastMessageType': message.type.toString(),
    'lastMessageTime': FieldValue.serverTimestamp(),
    'lastMessageSender': message.senderId, // Store sender's ID
    'users': [message.senderId, message.receiverId],
    'unreadMessageCount': {'${message.receiverId}': FieldValue.increment(1)},
    'typingStatus': {
      '${message.senderId}': false,
      '${message.receiverId}': false,
    },
  }, SetOptions(merge: true));
}