Files
cursor/plans/精简_spin_响应_210342c6.plan.md
ray zhou 2dd9f17da9 ok
2026-06-29 14:51:55 +08:00

4.6 KiB
Raw Permalink Blame History

name, overview, todos, isProject
name overview todos isProject
精简 Spin 响应 调整 `POST /api/lucky-reward/spin` 的 `SpinResultEntity`:去掉 spinId/prizeType/prizeAmountQf/myAmountDisplay新增 poolItemIdmyAmountQf 改为大单位 float3 位小数向下取整)。
id content status
amount-format-3dp LuckyRewardAmountService 新增 formatAmountDisplay3 + 单测 completed
id content status
spin-result-entity 精简 SpinResultEntity 字段poolItemId + myAmountQf float completed
id content status
logic-return executeManualSpin 返回新结构 completed
id content status
docs-yapi 更新 lucky_reward_api.md §3 与 YApi spin 接口 completed
false

手动 Spin 响应精简方案

现状

目标响应 data

字段 类型 说明
poolItemId int 命中的奖池项 ID客户端对照 poolItems 定位格子/本地图)
myAmountQf float 抽奖后 My Amount大单位、3 位小数、向下取整(字段名沿用,语义变更)
spinAvailable int 剩余 Spin 次数
playerStatus int 玩家状态
isDuplicate bool 幂等重复(当前手动 Spin 仍固定 false

删除: spinIdprizeTypeprizeAmountQfmyAmountDisplay

示例:

{
  "poolItemId": 3,
  "myAmountQf": 9.570,
  "spinAvailable": 0,
  "playerStatus": 1,
  "isDuplicate": false
}

实现步骤

1. 金额格式化3 位小数)

LuckyRewardAmountService 新增专用方法,例如 formatAmountDisplay3(int $amountQf): float

  • 规则:floor($amountQf) / 1000,再 number_format(..., 3, '.', '') 转 float
  • 与现有 2 位 formatAmountDisplay() 并存,避免影响 status/open-box/records 等接口

LuckyRewardAmountServiceTest 补充用例(如 9570 → 9.5709576 → 9.576)。

2. 更新 Entity

修改 SpinResultEntity

  • 删除:spinIdprizeTypeprizeAmountQfmyAmountDisplay
  • 新增:poolItemIdint
  • 修改:myAmountQf 类型 int → floatPHPDoc 注明「大单位 3 位小数展示值」

3. 更新 Logic 组装

LuckyRewardLogic::executeManualSpin() 返回处改为:

return new SpinResultEntity([
    'poolItemId' => $drawResult->poolItemId,
    'myAmountQf' => LuckyRewardAmountService::formatAmountDisplay3((int) $activityPlayer->my_amount_qf),
    'spinAvailable' => (int) $activityPlayer->spin_available,
    'playerStatus' => (int) $activityPlayer->status,
    'isDuplicate' => false,
]);
  • 服务端仍生成 manualSpinId 写库/日志,仅不再返回给客户端
  • prize_typeprize_amount_qf 仍写入 lucky_reward_spin_recordRecord Tab 不受影响

4. 文档与 YApi

5. 自检

  • verify-slot-backend.sh + docker php -l
  • LuckyRewardAmountServiceTest、现有 LuckyRewardDrawServiceTest(确认 poolItemId 链路未断)

数据流(变更后)

sequenceDiagram
    participant Client
    participant SpinAPI as POST_spin
    participant Logic as LuckyRewardLogic
    participant Draw as DrawService
    participant DB as spin_record

    Client->>SpinAPI: JWT, no body
    SpinAPI->>Logic: executeManualSpin
    Logic->>Draw: draw(poolItems)
    Draw-->>Logic: poolItemId, prizeType
    Logic->>DB: spin_id, prize_type, prize_amount_qf
    Logic-->>Client: poolItemId, myAmountQf(3dp), spinAvailable, playerStatus

影响范围

  • Breaking change:依赖旧 Spin 响应字段的前端需改为用 poolItemId 对照 poolItems 展示命中格My Amount 读 myAmountQffloat 3 位)
  • 无改动请求体仍为空Controller/Validator 无需改;后台奖池项 CRUD 不变