diff --git a/changelogs/2026-05/26_feat_mp_custom_products_all_filter_by_customizer_adminid.md b/changelogs/2026-05/26_feat_mp_custom_products_all_filter_by_customizer_adminid.md new file mode 100644 index 0000000..b98f2ee --- /dev/null +++ b/changelogs/2026-05/26_feat_mp_custom_products_all_filter_by_customizer_adminid.md @@ -0,0 +1,69 @@ +# feat(C端定制): `/mp/custom/products/all` 改为按定制师过滤 —— 新增**必填** `adminId` + +> **类型**: feat(**接口契约变更,前端必须改**) +> **关联 PR**: #3037(已合并 dev) / **关联工单**: #3036 +> **日期**: 2026-05-26 +> **影响接口**: `GET /mp/custom/products/all` +> **接收方**: mmg +> **前端**: **必须改**(否则调用直接 400);已部署测试服并实测通过 + +--- + +## 🎯 变更内容 + +`/mp/custom/products/all` 原为「无登录浏览**全部**定制产品」,返回所有定制产品。 + +现改为「**只返回指定定制师本人创建的定制产品**」:接口**新增必填 query 参数 `adminId`**(定制师 ID),后端按 `产品.created_by = adminId` 过滤。 + +> 业务语义:这里的 `adminId` 就是定制师身份接口 `GET /mp/customizer/me` 返回的 `adminId`(与分享名片链接 `?adminId={adminId}` 用的是同一个值)。前端已在拿/存这个值,本接口直接带上即可。 + +--- + +## 📋 接口契约(变更后) + +### 请求 `GET /mp/custom/products/all` + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| `adminId` | number(long) | **是(新增)** | 定制师 ID,只返回该定制师创建的定制产品;取自 `/mp/customizer/me` 的 `adminId` | +| `page` | number | 否 | 页码,默认 1,`<1` 纠正为 1 | +| `pageSize` | number | 否 | 每页条数,默认 20,上限 100 | + +### 响应 + +- 结构**不变**(仍是 `PageResult<定制产品列表项>`:`{ code, data: { records: [...], total, page, pageSize }, success }`)。 +- 仅是结果集从「全部」收窄为「该 `adminId` 创建的」。 + +### 示例 + +``` +GET /mp/custom/products/all?page=1&pageSize=20&adminId=1002 +→ 200 { code:200, data:{ total:3, records:[...3 条...] }, success:true } +``` + +--- + +## ⚠️ 前端需要做的事(Breaking) + +1. **调用本接口时必须带 `adminId`**:值取自 `GET /mp/customizer/me` 返回的 `data.adminId`。 +2. **不传 `adminId` 会直接报错**: + ```json + { "code": 400, "message": "缺少必要参数: adminId", "data": null, "success": false } + ``` + 原先「不带参数返回全部」的行为已**不存在**,请确认所有调用点都补上 `adminId`。 +3. 若页面语义是「查看某定制师的定制产品案例」,直接用该定制师的 `adminId`;若是「我(定制师本人)的定制产品」,用 `/mp/customizer/me` 返回的本人 `adminId`。 + +--- + +## ✅ 测试服验证(已通过) + +经测试服网关 `api.test.1814.love:9443` 实测: + +| 请求 | 结果 | +|------|------| +| `adminId=1002` | `total=3`(= 该定制师在库的有效定制产品数) | +| `adminId=1001` | `total=3` | +| `adminId=999999999`(不存在) | `total=0`,空列表 | +| 不传 `adminId` | `400 缺少必要参数: adminId` | + +软删除产品已被正确排除。