В Cloud Firestore нет концепции «обратной транзакции» (как и в других базах данных, с которыми я работал). Если у вас есть два различных действия, которые противоположны друг другу, вам придется либо реализовать две транзакции, либо найти способ превратить «обращение» в параметр в одном блоке кода.
Последнее фактическикажется довольно распространенным для вашего сценария здесь, где вы используете одну транзакцию с этими шагами:
- Считайте текущее значение документа, содержащего лайки
- Если документ содержит аналог длятекущий пользователь удаляет его.
- Если документ не содержит аналога для текущего пользователя, добавьте его.
Если нам, например, модель «понравилась» as
true and "has then unliked" as
false`, вы можете сделать что-то вроде:
let newLikeValue true
guard l1 == true else {
newLikeValue = false
}
transaction.updateData(["like": newLikeValue], forDocument: likesRef)