Firebase 颤振火基延迟函数

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的字段,可以

我正在使用Flatter和Firebase Firestore创建一个活动预订应用程序。有时,如果活动很受欢迎,用户可能会因为某人的速度更快而购买车票而没有座位,因此我想在购买前创建一个5分钟的预订,如果用户在该时间范围内没有购买,车票预订将自动删除。有人能给我一个建议吗?

在不了解您的数据结构和业务需求的情况下,很难给出答案,因此这里有一种方法可以做到这一点,只需很少假设:

  • 假设每个座位都有一个文档,我们称之为
    SeatDocument
  • SeatDocument
    有一个名为status的字段,可以将其设置为
    可用
    已阻止
    、或
    已售出
  • 每当用户在会话中购买票证时,其他人都不能为该座位购买相同的票证
在此场景中,每当用户进入会话以预订票证时,您都应该使用事务来:

  • 检索
    SeatDocument
  • 确保其状态为“可用”
  • 将其标记为已阻止
在此处使用事务可防止两个用户为同一票据进入会话,并允许您在确保数据正确的同时执行多个操作

如果用户最终购买了票据,您可以将其标记为
已售出
。如果五分钟过去了,您可以从客户端结束用户会话,并将票据标记为可用

您必须根据业务需求确定流程,但这只是如何实现的粗略概念

如果您不熟悉交易,这里有一个有用的参考资料和一个视频来解释:

====根据评论进行更新===

您可以创建一个云函数,该函数在票证状态发生更改时触发。在触发器功能中,您将获得
SeatDocument
,您可以在其中检查状态是否更改为
blocked
。如果是,则可以创建一个
预定功能
,该功能将在5分钟后运行,并检查状态是否已更改为
已售出
。如果没有,则可以将票证状态更新回
可用

简而言之,您可以使用云函数中的
触发器和
调度函数做很多事情。您还可以查看
callableFunctions
,您可以使用这些函数启动会话并从云函数的服务器端出售票证


如果不了解您的数据结构和业务需求,很难给出答案,因此这里有一种方法可以在很少假设的情况下实现:

  • 假设每个座位都有一个文档,我们称之为
    SeatDocument
  • SeatDocument
    有一个名为status的字段,可以将其设置为
    可用
    已阻止
    、或
    已售出
  • 每当用户在会话中购买票证时,其他人都不能为该座位购买相同的票证
在此场景中,每当用户进入会话以预订票证时,您都应该使用事务来:

  • 检索
    SeatDocument
  • 确保其状态为“可用”
  • 将其标记为已阻止
  • 在此处使用事务可防止两个用户为同一票据进入会话,并允许您在确保数据正确的同时执行多个操作

    如果用户最终购买了票据,您可以将其标记为
    已售出
    。如果五分钟过去了,您可以从客户端结束用户会话,并将票据标记为可用

    您必须根据业务需求确定流程,但这只是如何实现的粗略概念

    如果您不熟悉交易,这里有一个有用的参考资料和一个视频来解释:

    ====根据评论进行更新===

    您可以创建一个云函数,该函数在票证状态发生更改时触发。在触发器功能中,您将获得
    SeatDocument
    ,您可以在其中检查状态是否更改为
    blocked
    。如果是,则可以创建一个
    预定功能
    ,该功能将在5分钟后运行,并检查状态是否已更改为
    已售出
    。如果没有,则可以将票证状态更新回
    可用

    简而言之,您可以使用云函数中的
    触发器和
    调度函数做很多事情。您还可以查看
    callableFunctions
    ,您可以使用这些函数启动会话并从云函数的服务器端出售票证


    老实说,我怀疑在这种情况下,云计算功能是否能解决这个问题。理想情况下,您应该在后端服务器上处理这些事情(例如在Google Cloud Run中)。设备上的应用程序仅作为客户端,后端处理票据逻辑,与Firestore通信,等等。这比根据5分钟的清醒时间或其他任何情况做出假设更安全

    假设您的用户启动了应用程序,应用程序可以在后端初始化,这将为特定用户调出数据(最好存储预订机票的所有数据、一些历史记录等,只有后端服务器才能访问)

    另外,如果你计划在你的应用程序中进行销售,那么必须有一个后端通过谷歌API检查购买情况

    至于一般逻辑:

  • 应用程序(客户端)向后端发送用户想要购买票证的请求
  • 后端检查剩余票证的数量
  • 后端从总计数中删除一张票证,直到完成所有“文书工作”(处理细节、付款等)
  • 如果一切顺利