我正在嘗試在 Firestore 中創建一個后端來管理可用性。我有一個員工可用性集合,其中包含每個員工的檔案,每個檔案都包含一個地圖,其中鍵是為該員工預訂的約會的開始時間。該資料用于在客戶端生成用戶可以選擇預訂的時間段(約會意味著該時間段不可用)。
employee12345 {
appointments = { "10:00 AM" : true,
"11:00 AM" : true,
"12:00 PM" : true,
"1:00 PM" : true,
"2:00 PM" : true
}
}
我想創建一個 Firestore 規則來防止用戶重復預約。當用戶嘗試預訂下午 1:00 的時間段時,在上面的示例中,我需要執行以下更新。
db.collection("employeeAvailability").document("employee12345").updateDate([
"appointments.1:00 PM": true
]) { err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
}
}
我希望此交易被拒絕,并且 firebase 錯誤地說出“此約會時段已被預訂”之類的話。
顯然,有客戶端規則阻止人們選擇預訂的時間段,但我可以讓用戶同時嘗試預訂相同的開放位置,我希望資料庫通過接受第一次寫入并拒絕第二次寫入來處理這些競爭條件.
uj5u.com熱心網友回復:
我希望資料庫通過接受第一次寫入并拒絕第二次寫入來處理這些競爭條件。
然后,您應該使用transaction,如下所示:
const db = firebase.firestore();
const employeeDocRef = db
.collection('employeeAvailability')
.doc('employee12345');
const timeSlot = '1:00 PM';
db.runTransaction((transaction) => {
return transaction.get(employeeDocRef).then((employeeDoc) => {
const appointments = employeeDoc.get('appointments');
if (appointments.hasOwnProperty(timeSlot)) {
throw 'Slot already taken';
}
appointments[timeSlot] = true;
transaction.update(employeeDocRef, { appointments });
});
})
.then(() => {
console.log('Transaction successfully committed!');
})
.catch((error) => {
console.log('Transaction failed: ', error);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333917.html
標籤:javascript 火力基地 谷歌云firestore
上一篇:設定新集合的規則
