Как я могу фильтровать пользователей Firestore на Swift, основываясь на том, являются ли они друзьями? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь собрать базовое приложение для знакомств, и мне нужна помощь с пониманием того, как выбрать подходящих пользователей и загрузить их на отдельной странице ChatLobby. Вот где я сейчас:

// (1) when currentUser rejects/likes another user, this is saved into firestore as 0/1, respectively.

fileprivate func saveSwipeToFirestore(didLike: Int) {
    guard let uid = Auth.auth().currentUser?.uid else { return }

    guard let cardUID = topCardView?.cardViewModel.uid else { return }

    let documentData = [cardUID: didLike]

    Firestore.firestore().collection("swipes").document(uid).getDocument { (snapshot, err) in
        if let err = err {
            print("Failed to fetch swipe document: ", err)
            return
        }

        if snapshot?.exists == true {
            Firestore.firestore().collection("swipes").document(uid).updateData(documentData) { (err) in
                if let err = err {
                    print("Failed to save swipe data: ", err)
                    return
                }
                print("Successfully updated swipe...")

                if didLike == 1 {
                    self.checkIfMatchExists(cardUID: cardUID)
                }
            }
        } else {
            Firestore.firestore().collection("swipes").document(uid).setData(documentData) { (err) in
                if let err = err {
                    print("Failed to save swipe data: ", err)
                    return
                }
                print("Successfully saved swipe...")

                if didLike == 1 {
                    self.checkIfMatchExists(cardUID: cardUID)
                }
            }
        }
    }
}

Вышеприведенный код загружает словарь пользователей, по которым смахнул currentUser (в данный момент вошедший в систему), ключом является uid пользователя, с которым проведено перелистывание, и пара, показывающая, смахнул ли currentUser влево (Int == 0) или справа (Int == 1):

["1i8BNLIXBlbtwNSqw3JkX3QDDNl2": 1, "faImO8S61VNjXNe8CGa2SuDLmXf2": 1, "jittehkU6bNON9Feowh8xJt9ey62": 1] * 1006

// (2) if two users have swiped right on eachother, call a function which loads their profile pic and name into ChatLobbyController (where matches are shown)
fileprivate func checkIfMatchExists(cardUID: String) {

    Firestore.firestore().collection("swipes").document(cardUID).getDocument { (snapshot, err) in
        if let err = err {
            print("Failed to fetch document for card user:", err)
            return
        }

        guard let data = snapshot?.data() else { return }
        print(data)

        guard let uid = Auth.auth().currentUser?.uid else { return }

        let hasMatched = data[uid] as? Int == 1
        if hasMatched {
            addMatchToFriends(cardUID: String)
        }
    }
}

// (3) not sure how to place this info into addMatchToFriends
fileprivate func addMatchToFriends(cardUID: String) {
    ??????
}

У меня есть идея о логике выполнения (3), но я не уверен, как правильно выполнить в коде, кто-нибудь сможет сделать некоторые предложения? Информация о пользователе хранится в отдельной коллекции под названием «users», которая содержит поля «name» и «imageUrl», за которыми я слежу, а также сохраняет uid, который я использую, в моем словаре «swipes». Не стесняйтесь спрашивать дополнительную информацию о моем конце также. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...