# 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` |

软删除产品已被正确排除。
