Starter 应用

组织积分账本

理解组织共享积分、只追加账本、过期、幂等消费与退款。

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

积分属于组织,成员共享同一余额。账本只追加:不要更新或删除记录,也不要绕过 src/services/credit.ts 直接写 SQL。

发放会写入带唯一交易号、可选过期时间的正数行。消费在组织 advisory lock 内重放完整账本,优先使用最早过期的发放记录,仅在可用余额充足时写入负数行。一次消费可能拆成多个 :part:n 物理行,API 会合并为一笔逻辑交易;退款通过关联原消费的补偿行实现。

balance_after 是插入时的会计账本总额,不一定等于扣除过期记录后的当前可用额。请使用组织积分摘要获取可用、发放、消费和过期总量。

所有影响积分或金额的调用都要有稳定的业务幂等键。同一 key 调用两次只能产生一次账本效果,测试会验证 replay。订阅月度发放和 Stripe 履约也使用确定性交易号。管理端发放有上限并被审计。

新增付费功能时,在配置层计算成本,检查套餐 entitlement,通过积分服务消费,在领域记录保留根交易号,并在后续操作失败时追加退款。

组织积分账本 · Sushi SaaS