Files
cursor/plans/status_配置与未充值_f37679fd.plan.md
ray zhou f71a5c59af ok
2026-05-29 11:21:40 +08:00

107 lines
5.2 KiB
Markdown
Raw Permalink 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.

---
name: status 配置与未充值
overview: 修复 slot_console FreeCreditsLogic::status无玩家池时返回 status=0 及活动配置C 端新增 win_threshold不含 initial_amount、home_withdraw_unlocked。Logic 已按需求变更实现,待对齐单测与 PHPDoc。
todos:
- id: logic-pre-enrollment
content: FreeCreditsLogicbuildPreEnrollmentStatusstatus() 无 player 时返回配置态(已完成)
status: completed
- id: logic-build-status-fields
content: buildStatus / buildConfigClientFields 仅透出 win_threshold不含 initial_amount、home_withdraw_unlocked已完成
status: completed
- id: align-phpdoc
content: FreeCreditsController PHPDoc 与 buildConfigClientFields 注释:删除 initial_amount、home_withdraw_unlocked移除无用 DEFAULT_INITIAL_AMOUNT
status: completed
- id: align-unit-tests
content: FreeCreditsClientStatusTest / FreeCreditsEligibilityTest 白名单与断言与现实现一致
status: completed
isProject: false
---
# Free Credits status 接口修复计划(需求变更版)
## 需求确认2026-05-21
**C 端 `GET /api/free-credits/status` 约定:**
- **包含**`win_threshold`(来自 `ext_config.win_threshold_qf`
- **不包含**`initial_amount``home_withdraw_unlocked`
- 注册赠送金额:仍由 `game_base.user_register_reward` 等其它接口提供
- 首页 Withdraw 解锁C 端用 `status`(如 `STATUS_HOME_UNLOCKED=1`)或钱包余额 + `win_threshold` 自行判断;库表 `home_withdraw_unlocked` 仍由 `syncHomeWithdrawUnlocked` 维护,仅不下发 API
后台 type=11 的 `initial_amount_qf` 配置保留(运营后台用),**不**经 status 透出。
## 问题根因
[`FreeCreditsLogic::status()`](slot_console/app/api/logic/FreeCreditsLogic.php) 原逻辑在无 `free_credits_player` 时返回 `{ status: -1 }`,导致首充前 C 端无法展示活动(`status !== -1` 为展示开关)。
## 目标行为
| 场景 | status | 返回顶层字段 |
| --- | --- | --- |
| 无资格 / 无 type=11 配置 | `-1` | 仅 `status` |
| 有资格 + 有配置 + **无 player** | `0` | `status`, `frozen_amount`, `first_cash_amount`, `win_threshold`, `recharge_unlock_amount`, `help`, `packages`(空数组) |
| 有资格 + 有配置 + **有 player** | 玩家真实值 | 同上 + 玩家 `frozen_amount` / `first_cash_amount` / `packages` |
```mermaid
flowchart TD
statusReq[GET status] --> eligible{资格+活动配置?}
eligible -->|否| notVisible["status=-1"]
eligible -->|是| player{有 player 行?}
player -->|无| preConfig["status=0 + win_threshold 等"]
player -->|有| fullStatus["buildStatus 玩家态"]
```
## 已实现 Logic当前代码无需再改字段集
[`FreeCreditsLogic.php`](slot_console/app/api/logic/FreeCreditsLogic.php) 已与上表一致:
- `status()`:无 player → `buildPreEnrollmentStatus($config)`
- `buildConfigClientFields()`:仅 `win_threshold``recharge_unlock_amount``help`
- `buildStatus()` / `buildPreEnrollmentStatus()`**不**返回 `initial_amount``home_withdraw_unlocked`
## 待办:对齐文档与单测
### 1. PHPDoc — [`FreeCreditsController.php`](slot_console/app/api/controller/FreeCreditsController.php)
- 删除 `initial_amount``home_withdraw_unlocked` 字段说明
- 明确 `status=0` 时仍返回 `win_threshold``recharge_unlock_amount``help`
### 2. 清理 Logic 注释/死代码 — [`FreeCreditsLogic.php`](slot_console/app/api/logic/FreeCreditsLogic.php)
- 删除未使用的 `DEFAULT_INITIAL_AMOUNT` 常量(若仍保留)
- `buildConfigClientFields``@return` 改为仅含 `win_threshold``recharge_unlock_amount``help`
### 3. 单测
| 文件 | 改动 |
| --- | --- |
| [`FreeCreditsClientStatusTest.php`](slot_console/tests/Unit/FreeCreditsClientStatusTest.php) | `PLAYER_TOP_KEYS` 改为:`status`, `frozen_amount`, `first_cash_amount`, `win_threshold`, `recharge_unlock_amount`, `help`, `packages`;移除 `initial_amount``home_withdraw_unlocked` 断言 |
| [`FreeCreditsEligibilityTest.php`](slot_console/tests/Unit/FreeCreditsEligibilityTest.php) | `testStatusReturnsPreEnrollmentConfigWhenNoPlayer`:断言 `win_threshold=50`**不**断言 `initial_amount` / `home_withdraw_unlocked` |
运行:
```bash
docker exec -w /app/www/slot/slot_console php82 vendor/bin/phpunit tests/Unit/FreeCreditsClientStatusTest.php tests/Unit/FreeCreditsEligibilityTest.php
```
## C 端约定(供联调)
- **展示开关**`data.status !== -1`;首充前为 `status === 0`
- **进度条上限**`win_threshold`
- **注册赠送****不要**从 status 取;走注册/大厅配置接口
- **Withdraw 解锁****不要**依赖 `home_withdraw_unlocked` 字段;用 `status` 或余额逻辑
## 不在本次范围
- status 返回 `initial_amount` / `home_withdraw_unlocked`
- 注册发奖改读 `ext_config.initial_amount_qf`
- slot_pwa / gateway 前端改动
- backend 后台 `initial_amount_qf` 编辑能力(已存在)
## 验收清单
1. 无 player`status=0`,含 `win_threshold``recharge_unlock_amount``help``packages=[]`**无** `initial_amount``home_withdraw_unlocked`
2. 有 player含玩家态金额 + 同上配置字段
3. 无资格/无配置:`status=-1`
4. 单测全部通过