Я использую Firebase Firestore для хранения коллекции задач.
Я хочу создать следующий сценарий: когда пользователь удаляет заданную задачу c, она должна быть удалена из таблицы и базы данных только для этого текущего пользователя. Но я могу только удалить выбранную задачу из БД, но не для текущего пользователя. Пожалуйста, помогите!
Мой код настройки:
class TasksListScreen: UIViewController {
var tasksArray = [Task]() // array of tasks via Task struct
// to load data from db
func loadData() {
db.collection("tasks").getDocuments { (queryShapshot, error) in
if let error = error {
print("\(error.localizedDescription)")
} else {
self.tasksArray = queryShapshot!.documents.flatMap({Task(dictionary: $0.data())})
// to update user interface
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
}
Я могу удалить выбранное задание (документ) из моей коллекции с помощью этого кода.
extension TasksListScreen: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
// if action is deletion
if editingStyle == UITableViewCell.EditingStyle.delete {
let title = tasksArray[indexPath.row].title
let collectionRef = db.collection("tasks")
let query : Query = collectionRef.whereField("title", isEqualTo: title)
query.getDocuments(completion:{ (snapshot, error) in
if let error = error {
print(error.localizedDescription)
} else {
for document in snapshot!.documents {
self.db.collection("tasks").document("\(document.documentID)").delete()
}
}
})
// delete task from table view
tasksArray.remove(at: indexPath.row)
//tableView.reloadData()
tableView.deleteRows(at: [indexPath], with: .fade)
}
}
Но мне нужно удалить выбранный документ из БД только для текущего пользователя. Я пробовал этот код.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
// if action is deletion
if editingStyle == UITableViewCell.EditingStyle.delete {
// delete task from db for the current user
let title = tasksArray[indexPath.row].title
let user = Auth.auth().currentUser
// access collection of tasks of the current user
let collectionRef = db.collection("users").document((user?.uid)!).collection("tasks")
// search for task with needed title
let query : Query = collectionRef.whereField("title", isEqualTo: title)
print(title)
print(query)
query.getDocuments(completion:{ (snapshot, error) in
if let error = error {
print(error.localizedDescription)
} else {
for document in snapshot!.documents {
self.db.collection("users").document((user?.uid)!).collection("tasks").document("\(document.documentID)").delete()
}
}
})
}
}
Удаляет задачу во время текущего сеанса, но при повторном запуске приложения появляется удаленная задача.
Пожалуйста, помогите!