Untitled
unknown
swift
5 years ago
3.0 kB
8
Indexable
func getQuickDisposals(binID: String, completion: @escaping ([QuickDisposal]) -> Void) {
let quickDisposalDispatchGroup = DispatchGroup()
let usersDispatchGroup = DispatchGroup()
var quickDisposals: [QuickDisposal] = []
var uids = Set<String>()
var arrayuids: [String] = []
var profilePictures: [String: String] = [:]
var usernames: [String: String] = [:]
quickDisposalDispatchGroup.enter()
database.collection("quickDisposalSessions")
.whereField("binID", isEqualTo: binID)
.limit(to: 10)
.getDocuments() { (querySnapshot, error) in
if let error = error {
print("Error getting documents: \(error)")
} else {
for document in querySnapshot!.documents {
guard var model = try? FirestoreDecoder().decode(QuickDisposal.self, from: document.data()) else { continue }
model.id = document.documentID
quickDisposals.append(model)
}
}
quickDisposalDispatchGroup.leave()
}
usersDispatchGroup.enter()
quickDisposalDispatchGroup.notify(queue: .main) {
for disposal in quickDisposals {
guard let uid = disposal.userID else { continue }
uids.insert(uid)
}
for value in uids {
arrayuids.append(value)
}
self.database.collection("users").whereField("uid", in: arrayuids).getDocuments() { (querySnapshot, error) in
if let error = error {
print("Error getting documents: \(error)")
} else {
for document in querySnapshot!.documents {
if let username = document.get("username") as? String {
usernames[document.documentID] = username
} else {
usernames[document.documentID] = "anonymous"
}
if let profilePicture = document.get("profilePicture") as? String {
profilePictures[document.documentID] = profilePicture
} else {
profilePictures[document.documentID] = nil
}
}
}
usersDispatchGroup.leave()
}
}
usersDispatchGroup.notify(queue: .main) {
for index in quickDisposals.indices {
quickDisposals[index].username = usernames[quickDisposals[index].userID!]
quickDisposals[index].profilePicture = profilePictures[quickDisposals[index].userID!]
completion(quickDisposals)
}
}
}Editor is loading...