#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. Здесь та же проблема. Вам удалось решить эту проблему?