29 lines
2.8 KiB
Markdown
29 lines
2.8 KiB
Markdown
# 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 文档生成入口,所有响应使用统一包装和中文错误码语义。
|
||
|