Files
junhong_cmp_fiber/.scratch/ur36-bulk-package-purchase/issues/06-idempotent-bulk-purchase-creation.md
2026-07-22 17:25:05 +09:00

29 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 06 — 幂等创建批量订购任务
**What to build:** 通过现有后台认证的操作员可以提交唯一 `request_id`、单个套餐、统一支付方式、CSV Key 和凭证 Key 创建批量订购任务。接口在返回已接收任务前验证对象归属和真实元数据,并在同一事务保存套餐与操作者快照、上传绑定、请求指纹、任务事实、创建审计和可靠投递事件。
**Blocked by:**
- `.scratch/ur36-bulk-package-purchase/issues/02-controlled-upload-object-ownership.md` — 02 — 交付受控直传与对象归属证明
- `.scratch/tech-public-foundation/issues/02-transactional-public-outbox-write.md` — 02 — 在业务事务中可靠写入公共 Outbox
- `.scratch/tech-public-foundation/issues/03-outbox-at-least-once-delivery.md` — 03 — 完成 Outbox 到 Asynq 的至少一次投递闭环
- `.scratch/tech-public-foundation/issues/05-command-idempotency-contract.md` — 05 — 提供创建命令幂等与并发职责契约
- `.scratch/tech-public-foundation/issues/06-unified-async-task-contract.md` — 06 — 冻结统一异步任务五态和查询契约
- `.scratch/tech-global-audit/issues/01-audit-event-write-loop.md` — 01 — 交付不可变 Audit Event 写入闭环
**Status:** ready-for-agent
**架构通道:** 复杂写 Application + Port/Adapter。
**完整业务边界:** 本票收口批量订购任务的可靠接收、幂等、上传绑定和投递事实。明确不下载或解析 CSV、不创建逐行明细、不执行订单、不增加批量权限码或任务创建人隔离。
- [ ] 请求只接受 `request_id``package_id``payment_method``file_key``voucher_keys`;显式提交 `shop_id` 返回统一参数错误,其他未知字段不参与业务决策。
- [ ] `wallet` 要求凭证为空;`offline` 要求 1 至 5 个有效附件;套餐存在性和 ID、编码、名称快照在创建时确定。
- [ ] CSV 与凭证必须由当前账号按正确用途申请、真实存在且元数据合法CSV 实际大小不超过 10MB所有 Key 在任务事务内完成绑定。
- [ ] 相同 `request_id`、操作者和规范化请求指纹返回原任务;改变套餐、支付方式、文件、凭证或操作者时返回冲突。
- [ ] 并发首写最终只产生一个任务、一次上传绑定和一个可靠事件Asynq 暂不可用不丢失已提交任务。
- [ ] 任务使用全局五态并返回中文状态名;队列载荷只包含结构化 `task_id`,不传 `[]byte`、文件内容、临时路径或认证上下文。
- [ ] 创建成功写公共审计,记录任务号、支付方式、文件安全摘要和凭证数量,不记录预签名 URL、Token 或环境密钥。
- [ ] 新 Handler 同步注册后台路由并更新两个 OpenAPI 文档生成入口,所有响应使用统一包装和中文错误码语义。