updateRoom method

void updateRoom(
  1. Room room
)

Updates a room in the Firestore. Accepts any room. Room will probably be taken from the rooms stream.

Implementation

void updateRoom(types.Room room) async {
  if (firebaseUser == null) return;

  final roomMap = room.toJson();
  roomMap.removeWhere((key, value) =>
      key == 'createdAt' ||
      key == 'id' ||
      key == 'lastMessages' ||
      key == 'users');

  if (room.type == types.RoomType.direct) {
    roomMap['imageUrl'] = null;
    roomMap['name'] = null;
  }

  roomMap['lastMessages'] = room.lastMessages?.map((m) {
    final messageMap = m.toJson();

    messageMap.removeWhere((key, value) =>
        key == 'author' ||
        key == 'createdAt' ||
        key == 'id' ||
        key == 'updatedAt');

    messageMap['authorId'] = m.author.id;

    return messageMap;
  }).toList();
  roomMap['updatedAt'] = FieldValue.serverTimestamp();
  roomMap['userIds'] = room.users.map((u) => u.id).toList();

  await getFirebaseFirestore()
      .collection(config.roomsCollectionName)
      .doc(room.id)
      .update(roomMap);
}