findOrCreateGroupConversation static method

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

Implementation

static findOrCreateGroupConversation(
    {String? conversationId,
    peers,
    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,
      kDbMEMBERS: [...peers, loggedUsername],
      kDbLASTMESSAGETIME: 0,
      kDbENCRYPTKEY: generateEncryptKey(),
      kDbMEMBERSDETAIL: [
        ...peersDetail,
        {kDbUSERNAME: loggedUsername}
      ],
    };
    await FirebaseFirestore.instance
        .collection(kCollectionCONVERSATIONS)
        .doc(id)
        .set(data);
    return data;
  }
}