Starter 应用

预约功能

启用带并发安全保留、Stripe 结账、邮件与日历的可选预约流程。

已与启动模板提交 7d452a6 同步。

预约默认关闭。只有在 src/config/reservations.ts 定义服务目录、IANA 时区、营业时间、定价/定金、Stripe webhook 与邮件策略后,才设置 NEXT_PUBLIC_FEATURE_RESERVATIONS_ENABLED=true。Demo 自动种子也默认关闭,生产不得依赖。

公开流程使用 GET /api/reservations/servicesPOST /api/reservations/availability 和幂等 POST /api/reservations;成员记录为 GET /api/reservations/mine。页面是 /:locale/reserve/:locale/account/reservations

结账请求在数据库锁内创建一个 35 分钟 hold 与 Stripe Checkout Session,相同 Idempotency-Key 可安全重放。PostgreSQL advisory lock 与 exclusion constraint 防止并发时保留/确认时段重叠。只有验证过的 Stripe webhook 能确认付款,返回页不能;过期只释放该 Stripe session 关联的 hold。

确认后会入队发送含 ICS 的邮件并提供 Google Calendar 链接。上线前测试并发抢订、重复请求/webhook、放弃结账、延迟付款、时区/DST、定金/全款、邮件重试与组织隔离。

预约功能 · Sushi SaaS