From dc8d7df42ac019f387bbec417ec86e3b0a548211 Mon Sep 17 00:00:00 2001 From: talksik Date: Tue, 21 Dec 2021 15:34:20 -0800 Subject: [PATCH] message unwrapping not working but should work so going to try other things --- nirvana-ios/Models/Message.swift | 16 ++++++++++++++-- nirvana-ios/Services/AuthSessionStore.swift | 17 +++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/nirvana-ios/Models/Message.swift b/nirvana-ios/Models/Message.swift index 5e5b777..ded2e96 100644 --- a/nirvana-ios/Models/Message.swift +++ b/nirvana-ios/Models/Message.swift @@ -6,17 +6,29 @@ // import Foundation +import FirebaseFirestore +import Firebase import FirebaseFirestoreSwift struct Message: Identifiable, Codable { - @DocumentID var id: String? + @DocumentID var id: String? = UUID().uuidString + var receiverId: String var senderId: String var listenCount: Int - var hasListened: Bool? = false var audioDataUrl:String? @ServerTimestamp var sentTimestamp:Date? @ServerTimestamp var firstListenTimestamp:Date? + + enum CodingKeys: String, CodingKey { + case id + case receiverId + case senderId + case listenCount + case audioDataUrl + case sentTimestamp + case firstListenTimestamp + } } diff --git a/nirvana-ios/Services/AuthSessionStore.swift b/nirvana-ios/Services/AuthSessionStore.swift index 678efd5..87fe302 100644 --- a/nirvana-ios/Services/AuthSessionStore.swift +++ b/nirvana-ios/Services/AuthSessionStore.swift @@ -283,26 +283,35 @@ extension AuthSessionStore { // order: sent time should make it easy to add to dict // limit: because each user should have most 12 friends and so would at most need 24 messages to show turns and all that...save myself from hackers here // TODO: use the indexes I created - db.collection("messages").whereField("receiverId", isEqualTo: userId).whereField("listenCount", isLessThanOrEqualTo: 1).limit(to: 100) + db.collection("messages").whereField("receiverId", isEqualTo: userId).order(by: "sentTimestamp").limit(to: 100) .addSnapshotListener { querySnapshot, error in guard let documents = querySnapshot?.documents else { print("Error fetching messages: \(error!)") return } - for document in querySnapshot!.documents { - // decode and add to arr and dic - let currMessage:Message? = try? document.data(as: Message.self) + print("got all messages relevant") + + self.messagesArr = documents.compactMap { (queryDocumentSnapshot) -> Message? in + + let currMessage = try? queryDocumentSnapshot.data(as: Message.self) + print("new message received! \(queryDocumentSnapshot.data())") if currMessage != nil { // not really possible but just check // if the user doesn't exist for the dictionary, then add it // this means it's most likely someone new (never had user_friend relationship before) messaging for the user's inbox // TODO: prolly want to make a call to get this sender user details for the inbox + if self.friendMessagesDict[currMessage!.senderId] == nil { self.friendMessagesDict[currMessage!.senderId] = [currMessage!] } else { self.friendMessagesDict[currMessage!.senderId]?.append(currMessage!) } } + else { + print("unable to unwrap message") + } + + return currMessage } // TODO: optimize later