Files
zt-closet-backend/.codebuddy/plans/局部变量resp-req重命名为全称_419b3866.md
T
2026-09-11 01:41:52 +08:00

127 lines
6.7 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.
---
name: 局部变量resp-req重命名为全称
overview: 将项目中作为局部变量/函数参数的缩写 resp、req 统一重命名为 response、request,不改动 Dao 字段与 Go 惯用短名,不触碰 c.Request/http.Request 等标准库字段,保证编译与 vet 通过、对外行为不变。
todos:
- id: scan-occurrences
content: 使用 [subagent:code-explorer] 全仓普查 \bresp\b、\breq\b 命中点,输出文件与行号清单,并标注需排除的 RequestID/c.Request/ResponseFormat 等完整标识符
status: completed
- id: rename-handlers
content: 重命名 internal/routers/api/v1 全部 handler 中的局部 resp→response、req→request,借助 [skill:lsp-code-analysis] 做作用域内安全 rename 并同步引用
status: completed
dependencies:
- scan-occurrences
- id: rename-service
content: 重命名 internal/service 各文件的参数名 req→request 与局部 resp→response,保持函数体引用一致,借助 [skill:lsp-code-analysis] 校验引用
status: completed
dependencies:
- scan-occurrences
- id: rename-middleware-pkg
content: 重命名 internal/middleware/lzcwyjwt.go 及 pkg(wechat 等)中命中的局部 resp/req,排除类型名与导出符号
status: completed
dependencies:
- scan-occurrences
- id: verify-build
content: 执行 gofmt、go build ./...、go vet ./... 并 grep 复核无残留独立 resp/req 变量、排除项未被改动
status: completed
dependencies:
- rename-handlers
- rename-service
- rename-middleware-pkg
---
## 需求概述
将项目中作为**局部变量与函数参数**的缩写标识符 `resp`、`req` 统一重命名为全称 `response`、`request`,提升代码可读性与命名一致性。这是纯内部命名重构,不改变任何对外行为。
## 明确边界(已与用户确认)
- **要改**:`resp → response`、`req → request`(仅限局部变量/函数参数标识符)
- **保留不改**:
- service 中的 `xxxDao` 字段(`Dao` 为领域专有缩写)
- Go 惯用短名:`ctx`、`err`、`ok`、`db`、`id`、`tx`、循环变量 `i` 等
- 所有类型名/导出符号:`dto.XxxRequest`、`dto.XxxResponse`、`app.Response`、`app.NewResponse`、`ToResponse`、`ToErrorResponse`、`ResponseFormat`、`chatResponse`、`FortuneResponse` 等
- 标准库/框架字段:`c.Request`、`http.Request`、`c.Request.Context()`
- 含 `req`/`resp` 的完整标识符:`RequestID`、`GetRequestID`、`requestIDKey`、`ShouldBindQuery`、`responseFormat` 等
## 验收标准
- 项目内不再有名为 `resp`/`req` 的独立局部变量/参数标识符
- 上述排除项完全未被改动
- `go build ./...`、`go vet ./...` 通过,对外 HTTP 行为、DTO JSON tag、路由完全不变
## 技术方案
### 重构策略
采用**逐文件、按 Go 标识符词边界精确替换**的方式(`\bresp\b → response`、`\breq\b → request`),仅作用于变量声明、赋值与引用位置。优先使用 LSP 作用域内重命名(rename symbol)保证不跨作用域误伤;对形态高度统一的 handler 文件可按文件精确替换后逐一校验。
### 命中范围(已通过 search_content 统计确认)
**handler 层**(`internal/routers/api/v1/*.go`,形态统一):
- `resp := app.NewResponse(c)` → `response := app.NewResponse(c)`,后续 `resp.ToResponse(...)` / `resp.ToErrorResponse(...)` 同步更新
- `var req dto.XxxRequest`、`req.XxxUUID = c.Param(...)`、`&req` → 全部改为 `request`
**service 层**(`internal/service/*.go`):
- 方法参数名 `req *dto.XxxRequest` → `request *dto.XxxRequest`,函数体内引用同步更新
- 局部 `resp`(如 `horoscope.go`、`user.go` 组装响应处)→ `response`
**middleware / pkg**:
- `internal/middleware/lzcwyjwt.go` 的 `resp := app.NewResponse(c)`
- `pkg/wechat/*`、`pkg/errcode`、`pkg/app` 等如有名为 `req`/`resp` 的局部变量/参数,一并处理(以实际命中为准)
### 关键防回归点
- `\breq\b`(小写+词边界)天然不匹配 `c.Request`(大写 R)、`RequestID`、`requestIDKey`、`ShouldBindQuery`,但替换时须逐处确认无误伤
- `\bresp\b` 不匹配 `ResponseFormat`、`responseFormat`、`chatResponse`、`FortuneResponse`、`RecommendLLMResponse`,保持不动
- 类型名 `dto.*Request`/`dto.*Response`、`app.Response`/`app.NewResponse`/`ToResponse` 等导出符号绝不改动
- 替换后须确认无与既有 `response`/`request` 标识符的命名冲突(当前代码未发现同名局部变量)
### 涉及文件清单(预估,以实际命中为准)
```
internal/routers/api/v1/
├── user.go # [MODIFY] resp/req → response/request
├── quota.go # [MODIFY] 同上
├── horoscope.go # [MODIFY] 同上
├── clothes.go # [MODIFY] 同上(含 multipart 分支)
├── outfit.go # [MODIFY] 同上(命中较多)
├── closet.go # [MODIFY] 同上
├── collect.go # [MODIFY] 同上
├── like.go # [MODIFY] 同上
├── notification.go # [MODIFY] 同上
├── goods.go # [MODIFY] 同上
├── order.go # [MODIFY] 同上(含回调 handler)
└── airecommend.go # [MODIFY] 同上
internal/service/
├── user.go / quota.go / horoscope.go / clothes.go / outfit.go
├── closet.go / collect.go / like.go / notification.go
├── goods.go / order.go / airecommend.go # [MODIFY] 参数名 req→request、局部 resp→response
internal/middleware/
└── lzcwyjwt.go # [MODIFY] resp → response
pkg/
├── wechat/mini.go, wechat/pay.go # [MODIFY] 按实际命中的局部 req/resp
└── errcode/*, app/* # [CHECK] 按实际命中处理,类型/方法名不动
```
### 验证方式
- `gofmt -l` 无格式问题
- `go build ./...`、`go vet ./...` 通过
- grep 复核:无残留作为独立标识符的 `\bresp\b`/`\breq\b` 局部变量;`c.Request`、`RequestID`、`dto.*Request`、`dto.*Response`、`ResponseFormat` 等未被改动
## Agent Extensions
### SubAgent
- **code-explorer**
- Purpose:在重构前对全仓库 `\bresp\b`、`\breq\b` 做精确命中普查,产出「文件 → 行号 → 上下文」清单,并甄别需排除的完整标识符(RequestID、c.Request、ResponseFormat 等),确保不漏改、不误伤。
- Expected outcome:得到完整、去噪后的待改点清单,作为逐文件重命名的依据。
### Skill
- **lsp-code-analysis**
- Purpose:对 `req`/`resp` 局部变量与函数参数执行 LSP 作用域内 rename(含引用点同步更新)与改前引用预览,避免跨作用域误改。
- Expected outcome:每个 `resp`/`req` 标识符在其作用域内被安全重命名为 `response`/`request`,所有引用一致更新。