findOrCreateGroupConversation static method

dynamic findOrCreateGroupConversation({
  1. String? conversationId,
  2. dynamic peers,
  3. dynamic peersFirebaseId,
  4. dynamic peersDetail,
  5. dynamic groupName,
  6. dynamic thumbnail,
})

Implementation

static findOrCreateGroupConversation({
  String? conversationId,
  peers,
  peersFirebaseId,
  peersDetail,
  groupName,
  thumbnail,
}) async {
  QuerySnapshot q = await FirebaseFirestore.instance
      .collection(kCollectionCONVERSATIONS)
      .where(kDbCONVERSATIONTYPE, isEqualTo: kDbGroup)
      .where(kDbCONVERSATIONID, isEqualTo: conversationId ?? '-1')
      .get();
  if (q.size > 0) {
    return q.docs.first.data();
  } else {
    String id = conversationId ?? generateConversationId();
    Map<String, dynamic> data = {
      kDbCONVERSATIONID: id,
      kDbCONVERSATIONTYPE: kDbGroup,
      kDbGROUPNAME: groupName,
      kDbTHUMBNAIL: thumbnail,
      kDbLASTMESSAGETIME: 0,
      kDbENCRYPTKEY: generateEncryptKey(),
      kDbMEMBERS: [...peers, loggedUsername],
      kDbMEMBERSFIREBASEID: [...peersFirebaseId, loggedFirebaseId],
      kDbMEMBERSDETAIL: [
        ...peersDetail,
        {kDbUSERNAME: loggedUsername}
      ],
    };
    await FirebaseFirestore.instance
        .collection(kCollectionCONVERSATIONS)
        .doc(id)
        .set(data);
    return data;
  }
}