You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
4.2 KiB

3 days ago
# 02 · 端点风格全量统一(55 + 1 个端点)
- **Status:** resolved
- **Type:** task
- **Blocked by:** 01-ag-checklist
## 目标
crm-customer 全部 9 Controller 55 端点 + crm-rule `CustomerReminderRuleController` 1 端点,对齐 lead/opportunity 扁平动作动词风格。
## 改造规则
| 现状 | 改为 |
|---|---|
| `PUT /{id}`(客户/联系人编辑) | `POST /edit?id=` |
| `DELETE /{id}`(删联系人、删团队成员) | `POST /delete?id=`、`POST /member/remove?id=&memberUserId=` |
| `GET /{id}`、`/{id}/detail-head`、`/{id}/follow/page`、`/{taskId}/failures` 等全部 PathVariable | 查询参数:`/detail?id=`、`/detail-head?id=`、`/follow/page?id=`、`/failures?taskId=` |
| `POST /{workspace}/page`(workspace 路径变量) | `POST /page` + `workspace` 参数(对称商机 `viewType` 参数形态) |
| `POST /{workspace}/board/summary`、`/{workspace}/board/cards` | `POST /board/summary`、`POST /board/cards` + `workspace` 参数 |
| `POST /`(create 空路径) | `POST /create`、`POST /quick-create`(已有的保持) |
| `PUT /api/rule/customer/reminder` + `@RequestBody` JSON | `POST /save` + form 绑定(**消灭全仓唯一 ADR-0017 违规**) |
| `POST /{taskId}/confirm`、`/{id}/focus`、`/{id}/unfocus`、`/{id}/star`、`/{id}/unstar`、`/{id}/assign`、`/{id}/assignable` | 查询参数形态 |
## 波及面
- controller 层 mapping + 方法签名(PathVariable → Param DTO 字段);
- 全部相关单测(crm-customer 122 条基线)URL/参数断言;
- 冒烟脚本 URL(10 号票重跑时用新 URL);
- 商机侧跨模块走 Java service(HANDOFF 3.6),无 HTTP 连锁(R11)。
## 验收
- `grep -r "PathVariable\|@PutMapping\|@DeleteMapping\|@RequestBody" crm-customer/ crm-rule/(客户部分)` 零命中;
- crm-customer + crm-rule `mvn test` 绿。
## 同步动作
`.scratch/customer-module/API-SUMMARY.md` 全端点 URL 表重写(收尾 11 号票统一校验)。
## Answer
**改造范围(8 Controller 26 端点重写 + 2 处注释同步)**:
| Controller | 改造 |
|---|---|
| CustomerContactController | `POST ""`→`/create`;`PUT /{id}`→`POST /edit?id=`;`DELETE /{id}`→`POST /delete?id=`;`GET /{id}`→`GET /detail?id=` |
| CustomerController | `POST ""`→`/create`;`PUT /{id}`→`POST /edit?id=`;`GET /{id}`→`GET /detail?id=`;`GET /{customerId}/contacts`→`GET /contacts?customerId=` |
| CustomerDetailController | `/detail-head?id=`、`GET /member/list?id=`、`POST /member/add?id=`、`POST /member/remove?id=&memberUserId=`(原 DELETE)、`GET /opportunity/page?id=`、`GET /oplog/page?id=`、`POST /follow/add?id=`、`GET /follow/page?id=` |
| CustomerFocusController | `POST /focus|unfocus|star|unstar?id=`(去路径段) |
| CustomerImportController | `POST /confirm?taskId=`、`GET /result?taskId=`、`GET /failures?taskId=` |
| CustomerTransferController | `GET /detail?id=`、`POST /assign?id=`、`GET /assignable?id=` |
| CustomerWorkspaceController | 三端点去 `{workspace}` 路径段→`POST /page`、`POST /board/summary`、`POST /board/cards`,workspace 进 `CustomerWorkspacePageParam` 字段(对称商机 viewType-in-DTO 范式,服务签名不变) |
| CustomerReminderRuleController(crm-rule) | `PUT @RequestBody`→`POST /save` 表单绑定——全仓唯一 ADR-0017 违规消灭 |
Ownership / Ping / 其余既平端点本就合规,未动。测试为 service 层集成测试(直调 service,无 URL 断言),服务签名未动,零波及。
**验收**:
- [x] `grep -r "PathVariable\|@PutMapping\|@DeleteMapping\|@RequestBody" crm-customer/ crm-rule/` 零命中(含 target 二进制,重建后干净);
- [x] `mvn test` 绿:crm-rule 146(对齐基线)、crm-customer 133(基线 122,随用例演进)、上游 crm-preference 16,BUILD SUCCESS;
- [x] BOM 扫描:改动文件无 `EF BB BF`
**同步动作**:`.scratch/customer-module/API-SUMMARY.md` 全端点 URL 表重写按票 02 原注留待 11 号票收尾统一校验(R1 随修随改 + 终验对账)。冒烟脚本新 URL 归 10 号票重跑时更换。
**边界备忘**:`workspace` 现为表单参数,缺省/非法值由服务层按未知 workspace 拒绝(原路径段缺失=404,现=业务错误码);`pool` 看板拒绝归 03 号票。