Files
cursor/plans/launch_logic_参数与规范_8e5808ea.plan.md
ray zhou 1bcb6120dd ok
2026-05-29 17:23:17 +08:00

94 lines
5.0 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: Launch Logic 参数与规范
overview: 重构 `GameLaunchSessionLogic` 中仅为日志传递的 `$gameCode` 参数,并在用户级 `php-clean-code.mdc` / `agent-completion-gate.mdc` 中增加「参数必须服务于业务」的硬性约束与完成前自查项。
todos:
- id: refactor-find-methods
content: 重构 GameLaunchSessionLogic去掉 find* 中仅用于日志的 gameCode 参数,日志改用本步真实字段
status: completed
- id: update-php-clean-code
content: php-clean-code.mdc §3 增加「参数与日志」、§8 增加自查项
status: pending
- id: update-completion-gate
content: agent-completion-gate.mdc 增加 Logic 自查与 SLOT_ROOT=www/ray 校验说明
status: pending
- id: verify
content: docker php -l + SLOT_ROOT verify-slot-backend.sh回复粘贴完整输出
status: completed
isProject: false
---
# Launch Logic 参数重构 + 规范加固
## 问题
[`GameLaunchSessionLogic.php`](slot-pwa/app/api/logic/GameLaunchSessionLogic.php) 中以下方法将 `$gameCode` 作为入参,但**不参与查询/判断**,仅用于 `Log::error`
- `findActivePlatformMapping(GGameModel $gameModel, string $gameCode)`
- `findPlatformById(int $platformId, string $gameCode)`
- `findProviderGameService(GPlatformModel $platformModel, string $gameCode)`
违反 [`php-clean-code.mdc`](/Users/ray/.cursor/rules/php-clean-code.mdc) §3参数应表达业务需要、禁止误导性签名
## 一、代码重构(企业做法:查询方法只收查询条件)
**改动文件:** 仅 [`slot-pwa/app/api/logic/GameLaunchSessionLogic.php`](slot-pwa/app/api/logic/GameLaunchSessionLogic.php)
| 方法 | 调整后签名 | 失败日志字段(用已有入参) |
|------|------------|---------------------------|
| `findActivePlatformMapping` | `(GGameModel $gameModel)` | `game_id``active_platform_id` |
| `findPlatformById` | `(int $platformId)` | `platform_id` |
| `findProviderGameService` | `(GPlatformModel $platformModel)` | `provider_code``$platformModel->code` |
`resolveGameLaunchContext` 调用改为:
```php
$gameModel = $this->findGameByCode($gameLaunchDto->gameCode);
$platformMapping = $this->findActivePlatformMapping($gameModel);
$platformModel = $this->findPlatformById((int) $gameModel->active_platform_id);
$providerGameService = $this->findProviderGameService($platformModel);
```
**不引入** `GameLaunchResolveContext`(当前仅 3 步解析,编排层已有 `gameLaunchDto->gameCode`,避免过度设计)。
**保留** `findGameByCode(string $gameCode)``gameCode` 即查询条件,合理。
**可选增强(本计划内做):**`resolveGameLaunchContext` 最外层若需串联排障,可在 public 入口 `launchWithSession` 的 catch 中统一补 `game_code`(已有 `launch game session fail` 日志,解析阶段失败由各 `find*` 用自身字段即可)。
## 二、用户级规范更新
### 1. [`php-clean-code.mdc`](/Users/ray/.cursor/rules/php-clean-code.mdc)
**§3 方法规则** 末尾新增小节 **「参数与日志」**
- **禁止**为打日志、排障单独增加与该方法业务无关的参数(反例:`findPlatformById($id, $gameCode)``$gameCode` 只出现在 `Log::error`)。
- **查询/校验类方法**`find*``ensure*`)的参数必须等于该步骤的查询条件或判断依据。
- 跨多步共享的排障字段(如 `game_code`)应在 **用例编排方法**public Logic 入口或 `resolveXxx` 编排 private集中记录子步骤日志只写本子步骤真实使用的字段`platform_id``provider_code` 等)。
- 若多步都需要同一追溯上下文且步骤 ≥4再引入 readonly `XxxResolveContext`**禁止**向每个 private 方法重复挂相同标量。
**§8 Agent 自查** 增加一项:
- 是否存在「仅用于日志」的多余参数?
### 2. [`agent-completion-gate.mdc`](/Users/ray/.cursor/rules/agent-completion-gate.mdc)
**必须** 列表增加:
5. 修改 `app/**/Logic/**/*.php` 时,完成前对照 `php-clean-code` **§3 参数与日志** 与 **§8 自查**(不仅依赖 verify 脚本)。
6. 工作区在 `www/ray` 时,执行校验须:`SLOT_ROOT=/Users/ray/Documents/project/www/ray ~/.cursor/hooks/verify-slot-backend.sh`(避免 `PASS (no changed files)` 误判)。
### 3. 不改动 verify 脚本(本计划)
`verify-slot-backend.sh` 难以可靠检测「参数仅用于日志」;以 **规则 + Agent 自查** 为主。若后续误报多,再考虑启发式检查。
## 三、验收
1. `findPlatformById` / `findActivePlatformMapping` / `findProviderGameService` 签名中无仅日志用的 `$gameCode`
2. `docker exec -w /app/www/ray/slot-pwa php82 php -l app/api/logic/GameLaunchSessionLogic.php` 通过。
3. `SLOT_ROOT=/Users/ray/Documents/project/www/ray ~/.cursor/hooks/verify-slot-backend.sh` 输出 `PASS`(有 diff 时)。
4. 规范文件已更新Agent 自查项可对照执行。
## 范围外
- 不重构 `GameController` 响应格式。
- 不新增 `GameLaunchResolveContext` DTO除非实现时发现步骤继续增加