Starter 应用
预约功能
启用带并发安全保留、Stripe 结账、邮件与日历的可选预约流程。
已与启动模板提交
7d452a6同步。
预约默认关闭。只有在 src/config/reservations.ts 定义服务目录、IANA 时区、营业时间、定价/定金、Stripe webhook 与邮件策略后,才设置 NEXT_PUBLIC_FEATURE_RESERVATIONS_ENABLED=true。Demo 自动种子也默认关闭,生产不得依赖。
公开流程使用 GET /api/reservations/services、POST /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、定金/全款、邮件重试与组织隔离。