我正在使用一个简单的应用程序: 这是我第一次尝试使用Firebase函数+实时数据库。
这些功能将由外部客户端应用程序(例如android)调用。
如果不是javascript + nosqldb的话,我不会有问题,但是在这里我会卡住,因为我不确定最佳的db结构以及有关事务的操作。
I。 存储的数据:
II。 操作:
用户购买了一些门票-应该将门票添加到用户的数量并在购买历史记录中添加记录
用户使用一些票证-应该从用户的数量中删除票证,并向使用记录中添加一条记录
所以我的基本问题是ANDs-如果它是SQL数据库,我将使用事务处理,但是在这里我不确定什么是数据库结构和js代码以实现相同的结果。
已编辑: ======== index.js =======
exports.addTickets = functions.https.onCall((data, context) => {
// data comes from client app
const buyingRecord = data;
console.log(‘buyingRecord: ‘ + JSON.stringify(buyingRecord));
return tickets.updateTicketsAmmount(buyingRecord)
.then((result)=>{
tickets.addTicketsBuyingRecord(buyingRecord);
result.userid = buyingRecord.userid;
result.ticketsCount = buyingRecord.ticketsCount;
return result;
});
});
====== tickets.js =======
exports.updateTicketsAmmount = function(buyingRecord) {
var userRef = db.ref(‘users/’ + buyingRecord.userid);
var amountRef = db.ref(‘users/’ + buyingRecord.userid + ‘/ticketsAmount’);
return amountRef.transaction((current)=>{
return (current || 0) + buyingRecord.ticketsCount;
})
.then(()=>{
console.log(“amount updated for userid [“ + buyingRecord.userid + “]”);
return userRef.once(‘value’);
})
.then((snapshot)=>{
var data = snapshot.val();
console.log(“data for userid [“ + snapshot.key + “]:” + JSON.stringify(data));
return data;
});
}
exports.addTicketsBuyingRecord = function(buyingRecord) {
var historyRef = db.ref(‘ticketsBuyingHistory’);
var newRecordRef = historyRef.push();
return newRecordRef.set(buyingRecord)
.then(()=>{
console.log(‘history record added.’);
return newRecordRef.once(‘value’);
})
.then((snapshot)=>{
var data = snapshot.val();
console.log(‘data:’ + JSON.stringify(data));
return data;
});
}