bindbox-game/.trae/documents/实现「一番赏」预生成奖池与位置开奖方案.md
邹方成 45815bfb7d chore: 清理无用文件与优化代码结构
refactor(utils): 修复密码哈希比较逻辑错误
feat(user): 新增按状态筛选优惠券接口
docs: 添加虚拟发货与任务中心相关文档
fix(wechat): 修正Code2Session上下文传递问题
test: 补充订单折扣与积分转换测试用例
build: 更新配置文件与构建脚本
style: 清理多余的空行与注释
2025-12-18 17:35:55 +08:00

56 lines
3.4 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.

## 结论
- 不需要单独开新接口;在现有“统一接口”体系内,通过活动类型与策略插件即可兼容「一番赏」。
- 做法:以统一的资源与动作(创建/生成/列表/抽取/验证)为主干,按活动类型切换具体策略与字段含义。
## 统一接口适配方案
- 活动类型标识:在 `raffle_event` 增加 `activity_type`(如 `ichiban_position`) 与 `capabilities`(如 `choice_input=position``commit_reveal=true`)。
- 统一端点保持:
- 管理端:`POST /admin/events``POST /admin/events/{id}/generate``POST /admin/events/{id}/activate``POST /admin/events/{id}/close`
- 用户端:`GET /events/{id}``GET /events/{id}/choices``POST /events/{id}/draw``GET /events/{id}/verify`
- 字段语义按类型切换:
- `GET /events/{id}/choices`:一番赏返回可选 `slotIndex[]`;其他玩法可能返回空/不同结构。
- `POST /events/{id}/draw`:一番赏请求体携带 `slotIndex`;其他玩法携带各自所需的 `choice` 或为空(纯随机)。
- `GET /events/{id}/verify`:若 `commit_reveal=true`,统一返回 `salt``commitment_root`;无承诺玩法返回空/禁用。
## 策略插件化
- 定义通用接口 `ActivityPolicy`
- `generate(event, prize_types)` 预生成逻辑
- `presentChoices(event)` 返回用户可选项
- `validateChoice(event, choice)` 校验输入
- `draw(event, user, choice, tx)` 开奖事务
- `verify(event)` 承诺揭示
- 为「一番赏」实现 `IchibanPositionPolicy`;其他玩法实现各自策略,统一由路由/服务层按 `activity_type` 分派。
## 数据与契约最小改动
- 数据库:
- `raffle_event` 增:`activity_type``capabilities(json)``commitment_root``salt_hash`(适用于 commit-reveal 类型)
- 复用 `prize_slot``user_draw`;无需新表,仅根据类型解释 `slot_index` 的含义。
- 接口契约:
- `GET /events/{id}` 增加 `activityType``capabilities` 字段,前端可按能力渲染。
- 统一错误码:`CHOICE_INVALID``CHOICE_CONFLICT``EVENT_CLOSED` 等适用于所有玩法。
- 幂等与并发控制沿用统一实现。
## 前端适配
- 读取 `capabilities.choice_input`
- `position`:渲染位置网格并调用统一 `choices``draw(slotIndex)`
- 其他类型:按能力渲染不同输入组件或隐藏选择入口(纯随机)。
- 统一交互:下单/支付/抽取/结果页/分享逻辑一致,仅差异在“选择输入”。
## 公平与验证统一化
- 对支持承诺的玩法统一启用 `commit-reveal`
- 管理端在 `generate` 返回或活动页显示 `commitment_root`
- 关闭活动时 `verify` 公开 `salt` 与必要证明;
- 不支持承诺的玩法该端点返回空或 404。
## 测试与回归
- 策略切换回归:对 N 种玩法执行同一套接口用例,确保契约不变。
- 并发/幂等:统一覆盖;一番赏专项测试“同一位置并发争抢”。
- 能力探测:前端依据 `capabilities` 自适应渲染的快照测试。
## 迁移与兼容
- 现有客户端无需改路由;仅根据 `capabilities` 决定是否展示“选择位置”。
- 服务端新增策略模块与少量字段;旧玩法默认 `commit_reveal=false``choice_input=none`
## 验收准则
- 统一端点下,所有玩法均可正常运行。
- 「一番赏」玩法可完成预生成、选择位置、开奖、并发安全、事后可验证。