findOrCreateSoloConversation static method
dynamic
findOrCreateSoloConversation(
- dynamic username, {
- 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;
}
}