У меня есть некоторые изменения в моих требованиях:
Не только создать / запросить / отменить все предложение, но и выполнить некоторые действия с деталями предложения:
Вот предложение в списке активных предложений:
activeOffers
-LKohyZ58cnzn0vCnt9p
details
direction: "city"
seatsCount: 2
timeToGo: 5
uid: "-ABSIFJ0vCnt9p8387a" ---- offering user
Пользователь должен иметь возможность «запрашивать места», и в случае успеха запись предложения должна выглядеть следующим образом:
activeOffers
-LKohyZ58cnzn0vCnt9p
details
direction: "city"
seatsCount: 1 ----- reduced count
timeToGo: 5
uid: "-ABSIFJ0vCnt9p8387a"
deals
-GHFFJ0vCnt9p8345b ----- the userId of asking user
seatsCount: 1
status: "asked"
Но у меня есть 3 проблемы после выполнения источникапоказано ниже:
(как показано выше, предложение имеет 2 места, и пользователь запрашивает 1 место)
После выполнения в моем журнале у меня есть ОБА «Уменьшение количества мест на1 "и" Недостаточно места "... то есть: часть then и else части if-then-else: o
результат функции равен [] -т. е. сделка не создана.
Я не уверен, как сделать TODO: часть - добавить дочерний элемент (новый объект сделки) в dealRef, используя запрос userId в качестве KEY, потому что я думаю, что яздесь не нужен автоматически сгенерированный ключ.
входные данные имеют следующую структуру:
data
"uid": "-GHFFJ0vCnt9p8345b", ----- the userId of asking user
"id": "-LKohyZ58cnzn0vCnt9p", ----- the id of offer
"details":
"seatsCount": 1
AnВот мой код:
dealSeats = function(data) {
const TAG = '[dealSeats]: ';
var details = data.details;
var info = data.info;
var entryRef = db.ref('activeOffers/' + data.id);
var entryDetailsRef = entryRef.child('details');
var seatsCountRef = entryDetailsRef.child('seatsCount');
var success = false;
return seatsCountRef.transaction((current)=>{
var value = current;
if (value >= details.seatsCount) {
success = true;
value = value - details.seatsCount;
console.log(TAG + 'Reducing seats count by ' + details.seatsCount);
} else {
console.log(TAG + 'Not enought seats');
}
return value;
})
.then(()=>{
var deal = [];
if (success) {
console.log(TAG + 'Succes');
deal.seatsCount = details.seatsCount;
deal.status = 'asked';
// TODO: here should add the new deal to dealsRef
return deal;
} else {
console.log(TAG + 'Failure');
return deal;
}
})
}
И, как вы можете видеть - я не уверен, как правильно проверить успешность транзакции ...