Firebase 颤振火基延迟函数
我正在使用Flatter和Firebase Firestore创建一个活动预订应用程序。有时,如果活动很受欢迎,用户可能会因为某人的速度更快而购买车票而没有座位,因此我想在购买前创建一个5分钟的预订,如果用户在该时间范围内没有购买,车票预订将自动删除。有人能给我一个建议吗?在不了解您的数据结构和业务需求的情况下,很难给出答案,因此这里有一种方法可以做到这一点,只需很少假设:Firebase 颤振火基延迟函数,firebase,flutter,google-cloud-firestore,google-cloud-functions,delayed-execution,Firebase,Flutter,Google Cloud Firestore,Google Cloud Functions,Delayed Execution,我正在使用Flatter和Firebase Firestore创建一个活动预订应用程序。有时,如果活动很受欢迎,用户可能会因为某人的速度更快而购买车票而没有座位,因此我想在购买前创建一个5分钟的预订,如果用户在该时间范围内没有购买,车票预订将自动删除。有人能给我一个建议吗?在不了解您的数据结构和业务需求的情况下,很难给出答案,因此这里有一种方法可以做到这一点,只需很少假设: 假设每个座位都有一个文档,我们称之为SeatDocument SeatDocument有一个名为status的字段,可以
- 假设每个座位都有一个文档,我们称之为
SeatDocument
有一个名为status的字段,可以将其设置为SeatDocument
、可用
、或已阻止
已售出
- 每当用户在会话中购买票证时,其他人都不能为该座位购买相同的票证
- 检索
SeatDocument
- 确保其状态为“可用”
- 将其标记为已阻止
已售出
。如果五分钟过去了,您可以从客户端结束用户会话,并将票据标记为可用
您必须根据业务需求确定流程,但这只是如何实现的粗略概念
如果您不熟悉交易,这里有一个有用的参考资料和一个视频来解释:
====根据评论进行更新===
您可以创建一个云函数,该函数在票证状态发生更改时触发。在触发器功能中,您将获得SeatDocument
,您可以在其中检查状态是否更改为blocked
。如果是,则可以创建一个预定功能
,该功能将在5分钟后运行,并检查状态是否已更改为已售出
。如果没有,则可以将票证状态更新回可用
简而言之,您可以使用云函数中的触发器和调度函数做很多事情。您还可以查看callableFunctions
,您可以使用这些函数启动会话并从云函数的服务器端出售票证
如果不了解您的数据结构和业务需求,很难给出答案,因此这里有一种方法可以在很少假设的情况下实现:
- 假设每个座位都有一个文档,我们称之为
SeatDocument
SeatDocument
有一个名为status的字段,可以将其设置为可用
、已阻止
、或已售出
- 每当用户在会话中购买票证时,其他人都不能为该座位购买相同的票证
在此场景中,每当用户进入会话以预订票证时,您都应该使用事务来:
- 检索
SeatDocument
- 确保其状态为“可用”
将其标记为已阻止
在此处使用事务可防止两个用户为同一票据进入会话,并允许您在确保数据正确的同时执行多个操作
如果用户最终购买了票据,您可以将其标记为已售出
。如果五分钟过去了,您可以从客户端结束用户会话,并将票据标记为可用
您必须根据业务需求确定流程,但这只是如何实现的粗略概念
如果您不熟悉交易,这里有一个有用的参考资料和一个视频来解释:
====根据评论进行更新===
您可以创建一个云函数,该函数在票证状态发生更改时触发。在触发器功能中,您将获得SeatDocument
,您可以在其中检查状态是否更改为blocked
。如果是,则可以创建一个预定功能
,该功能将在5分钟后运行,并检查状态是否已更改为已售出
。如果没有,则可以将票证状态更新回可用
简而言之,您可以使用云函数中的触发器和调度函数做很多事情。您还可以查看callableFunctions
,您可以使用这些函数启动会话并从云函数的服务器端出售票证
老实说,我怀疑在这种情况下,云计算功能是否能解决这个问题。理想情况下,您应该在后端服务器上处理这些事情(例如在Google Cloud Run中)。设备上的应用程序仅作为客户端,后端处理票据逻辑,与Firestore通信,等等。这比根据5分钟的清醒时间或其他任何情况做出假设更安全
假设您的用户启动了应用程序,应用程序可以在后端初始化,这将为特定用户调出数据(最好存储预订机票的所有数据、一些历史记录等,只有后端服务器才能访问)
另外,如果你计划在你的应用程序中进行销售,那么必须有一个后端通过谷歌API检查购买情况
至于一般逻辑:
应用程序(客户端)向后端发送用户想要购买票证的请求
后端检查剩余票证的数量
后端从总计数中删除一张票证,直到完成所有“文书工作”(处理细节、付款等)
如果一切顺利