Как создать функцию списка пожеланий в SwiftUI и firestore

#firebase #google-cloud-firestore #swiftui

#firebase #google-облако-firestore #swiftui

Вопрос:

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

Но я получаю сообщение об ошибке: если один из пользователей нажмет на сердечную кнопку, она будет добавлена в избранное. Если другой пользователь войдет в систему и нажмет на кнопку сердца для того же рисунка, он не будет добавлен. только для одного пользователя.

 //MARK: to get the fav

func checkFavorite(artwork_id: String, completion: @escaping (Bool, String) -> Void) {
    
    let collectionRef = FirebaseReference(.fav)
    let user_id = Auth.auth().currentUser?.uid

    collectionRef.whereField("artwork_id", isEqualTo: artwork_id).getDocuments { (snapshot, err) in
        if let err = err {
            print("Error getting document: (err)")
        } else if (snapshot?.isEmpty)! {
            completion(false, "")
        } else {
            
            for document in (snapshot?.documents)! {
                
                let uid = document.data()["uid"] as? String ?? ""
                if uid == user_id {
                    let documentId = document.documentID
                    //let isLiked = document.data()["isLiked"]
                    completion(true, documentId)
                }
               /** else {
                    completion(false, "")

                }**/
            }
        }
    }
}


  
 //MARK: Add to favorite

func addToFavorite( artwork_id: String, uid: String) {
    
    var ref: DocumentReference? = nil

    ref = FirebaseReference(.fav).addDocument(data: [
                
        "uid":uid,
        "artwork_id":artwork_id,
        "timestamp": Date(),
        "artwork": FirebaseReference(.artworks).document(artwork_id),
        "isLiked": true
        
    ]) { err in
        if let err = err {
            print("Error adding document: (err)")
        } else {
            print("Artwork fav added with ID: (ref!.documentID)")
        }
    }
}

  
 
//MARK: delete Favorite

func deleteFavorite(documentID: String) {
    
    FirebaseReference(.fav).document(documentID).delete { (err) in
        
        if let err = err {
            print("Error deleting favorite: (err)")
        } else {
            print("favorite have been deleted")
        }
    }
}


  

Здесь вызов функции:

 
Button(action: { self.liked.toggle()
                            
                            //if self.liked {
                             let like = Int.init(self.data.num_likes)!
                            
                            checkFavorite(artwork_id: self.data.id) { (success,docId) in
                                    if success == false {
                                        
                                        addToFavorite(artwork_id: self.data.id, uid: self.uid)
                                        FirebaseReference(.artworks).document(self.data.id).updateData(["num_likes": "(like   1)"
                                        
                                        ])
                                    }
                                        
                                    else {
                                        FirebaseReference(.artworks).document(self.data.id).updateData(["num_likes": "(like - 1)"
                                            
                                        ])
                                        
                                        deleteFavorite(documentID: docId)
                                    }
                                            
                                }
                            //}
                            
                        }) {

                            Image(systemName: self.liked ? "heart.fill" : "heart" )
                                .foregroundColor(Color("Color"))
                        }
                        


  

Комментарии:

1. Я нашел видеоурок , который может помочь вам в этом

2. Здесь та же проблема. Вам удалось решить эту проблему?