簡體   English   中英

如何在 Hasura graphql 和 Netlify 中處理多個請求?

[英]How to handle a multiple requests in Hasura graphql and Netlify?

我正在使用 Flutter、Hasura graphql 和 Postgres DB 開發預訂系統。

假設我的數據庫有兩個主表,“Operation”和“Ticket”

"Operation" : "id", "operation_date", "seat_available".

"Ticket" : "id", "seat_no", "operation_id", "user_id".

在“操作”表中,我有一個名為“seat_available”的列,它是一個包含可用座位的字符串數組(例如,[“1”、“2”、“3”、“4”、“5”])

當某個用戶預訂座位時,它在“tickets”表中創建了一條記錄,其中包含“operation_id”,並且尚未分配任何座位號。

我在 Hasura 中創建了一個事件觸發器來觸發表“Tickets”中的“插入”,並使用 netlify 作為 webhook。 netlify function 用於檢查“Operation”表中的“seat_available”以及票證中的特定“operation_id”,並為該預訂票分配一個座位號。

問題是當多個用戶同時預訂座位時。 他們得到了相同的“seat_available”數據。 這會造成預訂沖突。 例如:

  • User_A 請求預訂門票。 當時 "seat_available" 是 "["1", "2", "3", "4", "5"]" 並且他們得到了座位 1。所以操作更新為 "[ "1A" , " 2”、“3”、“4”、“5”]
  • 在 User_B 請求預訂票后,此時 User_B 獲得與 User_A 相同的“seat_available”數據,即“[”1”、“2”、“3”、“4”、“5”]” . 它應該是從 User_A 更新的 "[ "1A" , "2", "3", "4", "5"]。

這使得 User_A 和 User_B 獲得了相同的預訂座位,即“1A”。 我怎么解決這個問題?

這可以通過在更新期間在 seat_available 上添加where條件來完成。 例如,你可以做這樣的事情

UPDATE operation SET seat_available = {"1A", "2", "3", "4", "5"} where id = "<operation_id>" and seat_available = {"1", "2", "3", "4", "5"} 
RETURNING * 

如果查詢返回一行,則更新發生,您可以繼續。 否則,您應該重復獲取最新的 seat_available 並分配座位的過程。

在您的示例中, User_A 查詢將返回一行。 User_B 查詢將不會返回,因為 User_A 查詢已經更新了 seat_available,並且在 seat_available 上 User_B 的 where 條件將為 false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM