【发布时间】:2018-07-23 16:57:45
【问题描述】:
假设您有一个 SaaS 应用并希望在用户注册时执行以下操作:
- 验证他们的姓名、电子邮件等
- 为用户创建一个Stripe客户帐户。
- 为新的 Stripe 客户订阅现有的 Stripe 计划。
- 在您的数据库中创建一条包含 Stripe 信息的用户记录。
- 为用户创建一个新会话。
- 将用户重定向到您应用的仪表板。
理想情况下,您希望所有这些都发生在一个事务中,即如果第 4 步失败,您希望撤消第 2 步和第 3 步...您不希望没有数据库记录的悬空 Stripe 客户和订阅。
您会推荐哪些设计模式来使此类多步骤/多服务流程具有事务性?
对于上下文
我正在使用 Node 中的 ES6 Promises 实现这个多步骤过程 - 伪代码如下:
async function signup_user_for_trial(req, res) {
const {email, name, plan, password} = req.body
if (!isValidEmail(email)) {
throw new Error(...)
}
let customer = await createStripeCustomer(email)
let subscription = await createSubscription(customer, plan)
let user = await createDBUser(customer, name, email, password)
let session = await createSession(req, user)
return res.redirect('/dashboard')
}
【问题讨论】:
标签: design-patterns stripe-payments saas