完善公共基础接入与全局审计闭环

This commit is contained in:
2026-07-23 19:10:30 +09:00
parent 17782d5f8e
commit 7e0171a8b4
32 changed files with 295 additions and 26 deletions

View File

@@ -302,7 +302,7 @@ func (e WalletDebitedEvent) OccurredAt() time.Time { return e.occurredAt }
```text
数据库事务
├── 保存聚合
├── 保存操作日志
├── 保存 Audit Event该动作需要审计时
└── 保存 Outbox 事件
提交事务
@@ -330,9 +330,20 @@ func (uc *DebitWalletUseCase) Execute(ctx context.Context, cmd DebitCommand) err
```
- Outbox 写入失败:事务回滚,避免“业务成功但关键事件永久丢失”。
- 高风险成功操作的 Audit Event 写入失败:事务回滚,避免“业务事实存在但无法回答谁做了什么”。业务已回滚后的失败或拒绝审计使用独立短事务,禁止裸 goroutine。
- Asynq 暂时不可用不回滚已提交业务Relay 后续重试。
- 消费者必须幂等;涉及余额、退款、充值时使用业务键或状态条件更新。
### 公共能力决策
每个新增或修改的完整用例都必须在 PRD/Ticket 中明确以下决定,不能只写“接入公共基础”:
- 是否写 Audit Event若否写明 N/A 理由,并增量维护全系统审计覆盖基线;
- 是否已有 Domain Ledger 作为金额、订单或状态事实Audit Event 不得替代它;
- 是否存在外部请求或回调,需要 Integration Log
- 是否存在提交后可靠副作用,需要同事务 Outbox并明确事件类型、版本和消费者幂等键
- 最终发布门禁所依赖的具体公共 Ticket不得使用无法判断完成状态的模糊依赖。
---
## 八、仓储接口