[CMLR-000] 建立改造基线清单
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
"id","priority","phase","area","title","description","acceptance_criteria","test_mcp","review_initial_requirements","review_regression_requirements","dev_state","review_initial_state","review_regression_state","git_state","owner","refs","notes"
|
||||
"CMLR-000","P0","1","backend","建立改造基线清单","冻结当前 18 个 Map 入参接口、关键返回类型与调用链,作为后续等价回归基线。","形成一份可追溯清单并覆盖 User/Pk/Anchors/SystemMessage/Chat 五个 Controller;抽样 5 条接口请求-响应对照样本可复现。","AUTOSERVER","核对接口 URL、HTTP 方法、请求字段名、返回类型不变;清单需可与代码位置一一跳转。","回归时逐项对照基线,任何字段级偏差需记录并阻断合并。","已完成","已完成","已完成","已提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:18;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:30;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:97;src/main/java/vvpkassistant/controller/UserController.java:65;src/main/java/vvpkassistant/controller/PkController.java:64;src/main/java/vvpkassistant/controller/AnchorsController.java:31;src/main/java/vvpkassistant/controller/SystemMessageController.java:25;src/main/java/vvpkassistant/controller/ChatController.java:37;plan/2026-02-08_20-03-29-controller-map-baseline.md:1;plan/2026-02-08_20-03-29-controller-map-baseline.md:32","picked_reason:作为P0基线先冻结18个Map入参接口与调用链,降低后续等价替换回归风险。 | review_initial:已核对18个接口URL/HTTP方法/Map字段名/返回类型与代码一致。 | evidence:新增基线文档并抽样5条可复现请求响应样本。 | evidence:rg核验Map入参接口数量=18。 | done_at:2026-02-08"
|
||||
"CMLR-010","P0","2.1","backend","补齐 User/Pk 侧 DTO 模型","为 UserController 与 PkController 的 Map 入参接口新增显式 DTO,保持 JSON key 与可空语义不变。","新增 DTO 覆盖 User 8 个接口与 Pk 6 个接口;Controller 编译通过且不再直接读取 Map key。","AUTOSERVER","字段命名与旧 Map key 完全一致;可选字段保持可空并保留默认行为。","针对每个 Controller 至少执行 1 条成功与 1 条异常参数用例,确认返回结构无变化。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:19;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:135;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:188;src/main/java/vvpkassistant/controller/UserController.java:64;src/main/java/vvpkassistant/controller/PkController.java:63",""
|
||||
"CMLR-020","P1","2.2","backend","补齐 Anchors/SystemMessage/Chat DTO","为 AnchorsController、SystemMessageController、ChatController 的 Map 入参接口新增 DTO,保留宽松兼容策略。","新增 DTO 覆盖 4 个接口(anchor/list, anchor/deleteMyAnchor, systemMessage/list, chat/receiveImMessage);Chat 回调可接受未知字段。","AUTOSERVER","Chat DTO 需支持扩展字段(如保留 payload 承载);分页字段类型与旧行为一致。","回归验证空字段、未知字段、缺字段场景,保证错误路径与历史一致。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:53;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:227;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:254;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:280;src/main/java/vvpkassistant/controller/AnchorsController.java:30;src/main/java/vvpkassistant/controller/SystemMessageController.java:24;src/main/java/vvpkassistant/controller/ChatController.java:36",""
|
||||
"CMLR-030","P0","3","backend","控制器签名 Map->DTO 等价替换","仅替换 Controller 方法参数类型与取值逻辑,保持 URL、HTTP 方法、返回 VO/Map 结构不变。","18 个 Map 入参接口全部改为 DTO;全局路由无新增/删除;接口返回类型与 JSON 字段集合与基线一致。","AUTOSERVER","代码评审重点检查序列化字段、空值分支、异常处理路径是否与旧实现等价。","回归执行关键接口快照比对(字段名、字段数量、状态码),差异需附原因。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:20;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:136;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:365",""
|
||||
"CMLR-040","P0","4.1","backend","迁移 User 域注解 SQL 到 Lambda","将 User 相关 Mapper 注解 SQL 迁移到 MyBatis-Plus LambdaQuery/LambdaUpdate,并保证签到与手机号查询语义不变。","UserDao 中目标注解方法完成迁移或迁出;`queryWithPhoneNumber`、签到相关查询写入等价实现并通过测试。","AUTOSERVER","确认真实表名与实体映射一致(system_user/system_users 差异);签到日期逻辑统一时区。","执行用户登录、签到首签/重复签到、我的 PK 列表查询回归并对比旧行为。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:124;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:140;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:144;src/main/java/vvpkassistant/User/mapper/UserDao.java:16",""
|
||||
"CMLR-050","P0","4.2","backend","迁移 PK 域注解 SQL 到 Lambda","将 PkInfoDao、PkRecordDao、PkRecordDetailDao 注解 SQL 分组迁移为 Lambda 实现,保持筛选、排序、删除语义一致。","PK 域清单内注解方法完成迁移;删除/邀请/详情查询接口行为与原 SQL 等价;关键排序结果稳定。","AUTOSERVER","分批提交并逐批验证,避免跨模块大范围回归;重点检查置顶与邀请状态条件。","回归 `/pk/pkList`、`/pk/pkInfoDetail`、`/pk/deletePkDataWithId`、`/pk/createPkRecord` 成功/失败路径。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:21;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:183;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:184;src/main/java/vvpkassistant/pk/mapper/PkInfoDao.java:14;src/main/java/vvpkassistant/pk/mapper/PkRecordDao.java:17;src/main/java/vvpkassistant/pk/mapper/PkRecordDetailDao.java:15",""
|
||||
"CMLR-060","P0","5","backend","修复跨表归属并新增 SignInRecordDao","将 UserDao 中跨表 SQL 迁移到正确 Mapper,新增 SignInRecord 实体与 Dao,迁移明细查询到 PkRecordDetailDao。","新增 `SignInRecord`+`SignInRecordDao` 并接入;`UserDao` 不再承载 `pk_record` 与 `sign_in_records` SQL;详情查询归位到 `PkRecordDetailDao`。","AUTOSERVER","评审需确认实体@TableName、字段映射、Mapper 扫描路径与事务边界正确。","执行签到链路、PK 详情链路、handlePkInfo 链路回归,确认依赖注入与事务无回归。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:22;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:91;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:93;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:137",""
|
||||
"CMLR-070","P0","6","backend","动态查询 selectPkInfoByCondition 等价迁移","将 `selectPkInfoByCondition` 迁移为 Lambda 条件拼装并保留原排序语义,必要处使用 `last` 保序。","在相同输入下,迁移前后结果集数量、顺序、关键字段完全一致;覆盖 condition 为空/有值、有无 userId 两类场景。","AUTOSERVER","评审需检查 every condition 分支、排序表达式与 SQL 注入风险控制。","执行首页筛选、主播 ID 脱敏、置顶排序回归;输出前后结果对比记录。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:23;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:189;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:196;src/main/java/vvpkassistant/pk/mapper/PkInfoDao.java:14",""
|
||||
"CMLR-080","P0","7","backend","完成编译与分层自动化测试","完成全量编译,并为改造影响的 Controller/DAO 补齐最低成功+失败用例,确保可持续回归。","`mvn clean test` 通过;涉及改造的每个 Controller 至少 1 个成功 + 1 个失败/校验用例;关键 DAO 有等价查询测试。","AUTOSERVER","测试需覆盖分页、幂等、非法参数、空结果等分支;失败断言使用稳定错误码/消息。","回归前后测试结果可追溯(命令+结果),新增测试不得依赖脆弱时间窗口。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:24;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:148;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:199;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:236",""
|
||||
"CMLR-090","P0","8","both","核心链路端到端回归","围绕分页、置顶、邀请状态、主播 ID 脱敏、签到幂等等关键路径执行联调回归,确认接口输出完全兼容。","关键路径回归清单全部通过;至少覆盖 10 条核心接口用例并完成字段级比对;无阻断级差异。","AUTOE2E","联调前固定测试数据与时间窗口,避免误判;接口对比需包含状态码与响应字段。","增加并发与边界复测(重复邀请、重复签到、置顶过期边界),确认无行为漂移。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:25;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:146;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:197;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:367",""
|
||||
"CMLR-100","P1","8.1","both","非改造模块冒烟回归","对 FunctionConfig/File/OTP 三个无 Map 改造模块执行冒烟,确保全局扫描与参数绑定未受影响。","`getAllConfig/updateConfigValue`、文件上传、OTP 获取各至少 1 成功 + 1 异常路径通过;返回结构与历史一致。","AUTOE2E","检查 Mapper 扫描、全局配置与 multipart 绑定是否因改造受影响。","回归覆盖配置更新可见性、空文件上传、密钥异常等边界。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:305;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:329;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:352",""
|
||||
"CMLR-110","P2","9","backend","输出迁移映射与兼容性说明","沉淀旧注解方法到新 Lambda 实现的映射表与兼容性结论,作为审计与后续维护依据。","形成可提交文档,至少包含方法映射、风险点、回滚策略、兼容性结论四部分;refs 可追溯到代码位置。","AUTOSERVER","文档评审要求“可审计、可定位、可回滚”,禁止仅描述结论不附证据。","发布前复核文档与实际代码一致性,抽查不少于 5 条映射记录。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:26;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:364;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:370",""
|
||||
|
80
plan/2026-02-08_20-03-29-controller-map-baseline.md
Normal file
80
plan/2026-02-08_20-03-29-controller-map-baseline.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# Controller Map 入参改造基线(CMLR-000)
|
||||
|
||||
## 1. 基线范围与统计
|
||||
- 目标 Controller: `UserController`、`PkController`、`AnchorsController`、`SystemMessageController`、`ChatController`
|
||||
- Map 入参接口总数: `18`
|
||||
- HTTP Method: 全部为 `POST`
|
||||
- 基线冻结日期: `2026-02-08`
|
||||
|
||||
## 2. Map 入参接口清单(URL/字段/返回类型/调用链)
|
||||
|
||||
| Controller | URL | 入参字段(Map key) | 返回类型 | 主要调用链 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| UserController | `/user/inputUserInfo` | `code`,`id` | `ResponseData<Object>` | `UserController.inputUserInfo -> VVRequester.loginApp -> UserDao.updateById` |
|
||||
| UserController | `/user/loginWithPhoneNumber` | `code`,`inviterId(可选)` | `ResponseData<Object>` | `UserController.loginWithPhoneNumber -> VVRequester.queryPhoneNumber -> UserDao.queryWithPhoneNumber/insert` |
|
||||
| UserController | `/user/queryMyAllPkData` | `userId`,`page`,`size` | `ResponseData<Object>` | `UserController.queryMyAllPkData -> PkInfoDao.queryAllPkData` |
|
||||
| UserController | `/user/handlePkInfo` | `type`,`userId`,`page`,`size` | `ResponseData<Object>` | `UserController.handlePkInfo -> UserDao.findCreatedPk/getMyGuestPkList` |
|
||||
| UserController | `/user/pkRecordDetail` | `id` | `ResponseData<Object>` | `UserController.pkRecordDetail -> PkRecordDetailDao.queryDetail` |
|
||||
| UserController | `/user/pinToTop` | `articleId`,`pinExpireTime` | `ResponseData<Object>` | `UserController.pinToTop -> UserDao.selectById/updateById + PkInfoDao.updateById` |
|
||||
| UserController | `/user/cancelPin` | `articleId` | `ResponseData<Object>` | `UserController.cancelPin -> UserDao.updateById + PkInfoDao.updateById` |
|
||||
| UserController | `/user/pointsDetail` | `userId`,`page`,`size` | `ResponseData<Object>` | `UserController.pointsDetail -> CoinRecordsDao.fetchMyPointsData` |
|
||||
| PkController | `/pk/pkList` | `page`,`size`,`condition`,`userId(可选)` | `ResponseData<Object>` | `PkController.pkList -> PKService.getPKList` |
|
||||
| PkController | `/pk/queryMyCanUsePkData` | `userId` | `ResponseData<Object>` | `PkController.queryMyCanUsePkData -> PkInfoDao.queryCanUseData` |
|
||||
| PkController | `/pk/pkInfoDetail` | `id`,`userId`,`from` | `ResponseData<Object>` | `PkController.pkInfoDetail -> PKService.pkInfoDetail` |
|
||||
| PkController | `/pk/deletePkDataWithId` | `id` | `ResponseData<Object>` | `PkController.deletePkDataWithId -> PkInfoDao.deletePkDataWithId` |
|
||||
| PkController | `/pk/fetchDetailPkDataWithId` | `id` | `ResponseData<Object>` | `PkController.fetchDetailPkDataWithId -> PkRecordDao.fetchDetailPkDataWithId` |
|
||||
| PkController | `/pk/listUninvitedPublishedAnchorsByUserId` | `userId` | `ResponseData<Object>` | `PkController.listUninvitedPublishedAnchorsByUserId -> PkInfoDao.listUninvitedPublishedAnchorsByUserId` |
|
||||
| AnchorsController | `/anchor/list` | `id` | `ResponseData<Object>` | `AnchorsController.myAnchorList -> AnchorsService.selectMyAnchor` |
|
||||
| AnchorsController | `/anchor/deleteMyAnchor` | `id` | `ResponseData<Object>` | `AnchorsController.deleteMyAnchor -> AnchorsService.deleteMyAnchor` |
|
||||
| SystemMessageController | `/systemMessage/list` | `page`,`size` | `ResponseData<Object>` | `SystemMessageController.messageList -> SystemMessageDao.messageList` |
|
||||
| ChatController | `/chat/receiveImMessage` | 任意 JSON(Map 宽松接收) | `Map<String,Object>` | `ChatController.receiveImMessage -> 返回固定 code/content` |
|
||||
|
||||
## 3. 抽样 5 条请求-响应对照(可复现)
|
||||
|
||||
> 说明:以下样本用于回归字段级比对。`BASE_URL` 默认 `http://127.0.0.1:8086`。
|
||||
|
||||
### Case-01 `/user/queryMyAllPkData`
|
||||
```bash
|
||||
curl -sS -X POST "$BASE_URL/user/queryMyAllPkData" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"userId":1,"page":0,"size":10}'
|
||||
```
|
||||
期望:HTTP 200,顶层为 `ResponseData` 结构,`data` 为数组;数组元素包含原有 `PkInfoModel` 字段集合且保留 `isPin` 计算结果。
|
||||
|
||||
### Case-02 `/pk/deletePkDataWithId`
|
||||
```bash
|
||||
curl -sS -X POST "$BASE_URL/pk/deletePkDataWithId" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"id":123}'
|
||||
```
|
||||
期望:HTTP 200;若目标处于置顶中,返回错误结构与文案 `"该信息在置顶中。如要删除清先取消置顶"`;否则成功返回空字符串。
|
||||
|
||||
### Case-03 `/anchor/list`
|
||||
```bash
|
||||
curl -sS -X POST "$BASE_URL/anchor/list" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"id":1}'
|
||||
```
|
||||
期望:HTTP 200,`data` 为该用户主播列表;返回字段结构与当前 `AnchorsService.selectMyAnchor` 一致。
|
||||
|
||||
### Case-04 `/systemMessage/list`
|
||||
```bash
|
||||
curl -sS -X POST "$BASE_URL/systemMessage/list" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"page":0,"size":20}'
|
||||
```
|
||||
期望:HTTP 200,`data` 为系统消息数组,分页偏移逻辑为 `page * size`。
|
||||
|
||||
### Case-05 `/chat/receiveImMessage`
|
||||
```bash
|
||||
curl -sS -X POST "$BASE_URL/chat/receiveImMessage" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"eventType":"im","payload":{"k":"v"},"unknownField":1}'
|
||||
```
|
||||
期望:HTTP 200,返回固定结构 `{"code":200,"content":"success"}`,并保持对未知字段的宽松接收。
|
||||
|
||||
## 4. 快速核验命令(接口数量)
|
||||
```bash
|
||||
rg -n "Map<.*>\\s+\\w+\\)" src/main/java/vvpkassistant/controller/{UserController.java,PkController.java,AnchorsController.java,SystemMessageController.java,ChatController.java}
|
||||
```
|
||||
期望:匹配到 `18` 个 Map 入参方法。
|
||||
Reference in New Issue
Block a user