findOrCreateSoloConversation static method

dynamic findOrCreateSoloConversation(
  1. dynamic username, {
  2. dynamic firebaseId,
})

Implementation

static findOrCreateSoloConversation(username, {firebaseId}) async {
  QuerySnapshot q = await FirebaseFirestore.instance
      .collection(kCollectionCONVERSATIONS)
      .where(kDbCONVERSATIONTYPE, isEqualTo: kDbSOLO)
      .where(kDbMEMBERS, arrayContains: loggedUsername)
      // .where(kDbMEMBERS, arrayContains: peerId)
      .get();
  if (q.docs.any(
      (d) => ((d.data() as Map)[kDbMEMBERS] as List).contains(username))) {
    return q.docs
        .firstWhere(
            (d) => ((d.data() as Map)[kDbMEMBERS] as List).contains(username))
        .data();
  } else {
    String id = generateConversationId();
    Map<String, dynamic> data = {
      kDbCONVERSATIONID: id,
      kDbCONVERSATIONTYPE: kDbSOLO,
      kDbLASTMESSAGETIME: 0,
      kDbENCRYPTKEY: generateEncryptKey(),
      kDbMEMBERS: [username, loggedUsername],
      kDbMEMBERSFIREBASEID: [firebaseId, loggedFirebaseId],
      kDbMEMBERSDETAIL: [
        {kDbUSERNAME: username},
        {kDbUSERNAME: loggedUsername}
      ],
    };
    await FirebaseFirestore.instance
        .collection(kCollectionCONVERSATIONS)
        .doc(id)
        .set(data);
    return data;
  }
}