firebase功能+实时数据库-数据库结构和代码

时间:2018-07-25 14:23:05

标签: javascript firebase firebase-realtime-database

我正在使用一个简单的应用程序: 这是我第一次尝试使用Firebase函数+实时数据库。

这些功能将由外部客户端应用程序(例如android)调用。

如果不是javascript + nosqldb的话,我不会有问题,但是在这里我会卡住,因为我不确定最佳的db结构以及有关事务的操作。

I。 存储的数据:

  • 用户个人资料(id,全名,电子邮件,电话,照片)
  • 每位用户的机票金额
  • 购票历史
  • 使用记录的历史记录

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;
 });
}

1 个答案:

答案 0 :(得分:1)

您将必须使用回调,Android上添加或读取数据的请求具有onSuccess或OnFailure回调,我使用它来触发新请求。

您可以在文档here上进行检查:)

如果您使用Firestore而不是使用RealTime数据库,也可以使用info这里的FireStore事务。