feat(catalog): add product catalog APIs

This commit is contained in:
lai_hong
2026-09-13 11:17:53 +08:00
parent 63c0013076
commit 59e398fcf9
15 changed files with 655 additions and 68 deletions
+90
View File
@@ -0,0 +1,90 @@
# R1 商品目录交付说明
**提供方:成员 1R1 商品目录)**
**可使用成员:成员 2(设计清单)、成员 3(订单)、成员 4(设计与生产)**
**分支:`feat/r1-catalog`**
R1 商品目录已完成,可以对外提供商品数据。商品页面现在从后端接口读取商品信息,不再以写死在前端的商品数据作为主数据源。本说明中的验证结果用于证明商品目录已经真实可用;接口说明用于方便其他成员接入这份目录数据。
## 已完成内容
| 完成项 | 结果 |
| --- | --- |
| 后端商品数据 | 已建立商品分类及 5 个在售商品的本机数据。 |
| 商品接口 | 已提供商品列表、单个商品详情和分类列表接口。 |
| 前端商品页面 | 首页、商品列表、商品详情、立即定制页均已接入商品接口。 |
| 本机联调环境 | Docker 中的后端、数据库、Redis 已启动;微信开发者工具可正常运行前端。 |
## 已完成前后端数据通路验证
这次验证不只是确认接口能访问,而是确认后端数据变化会传到前端页面,证明前端展示的确实是后端商品数据。
| 验证步骤 | 验证结果 |
| --- | --- |
| 读取商品初始值 | `notebook-small` 的价格为 12 元,划线原价为 18 元。 |
| 修改后端数据库 | 将该商品测试价格改为 19 元,测试划线原价改为 29 元。 |
| 重新编译小程序 | 微信开发者工具重新编译后,商品卡片和详情页同步显示 19 元、29 元。 |
| 验证结论 | 前端展示随数据库和接口返回同步改变,前后端商品数据通路正常。 |
![image-20260912143719516](C:\Users\24595\AppData\Roaming\Typora\typora-user-images\image-20260912143719516.png)
![image-20260912143750067](C:\Users\24595\AppData\Roaming\Typora\typora-user-images\image-20260912143750067.png)
**结论:** R1 商品页面读取的是后端真实商品数据;后端数据变化能够传递到前端页面。因此以下接口已完成实际联调验证,可作为其他路线的商品数据来源。
## 对外使用约定
| 约定 | 说明 |
| --- | --- |
| 稳定商品 ID | 跨模块使用 `productId` 关联商品,例如 `notebook-small``coaster``penbox`。不要使用数组下标或商品名称作为关联键。 |
| 公开查询 | 商品与分类查询不依赖登录态;前端调用时使用 `auth: false`。 |
| 价格来源 | `price` 是服务端权威价格。前端可展示价格,订单金额必须由 R3 服务端重新查询并计算。 |
| 在售限制 | 商品列表与详情只返回 `ON_SALE` 商品;不存在或下架商品的详情返回 `404`。 |
## 商品接口
所有接口统一返回:`{ code: 0, message: 'ok', data }`。实际业务数据位于 `data` 中。
| 接口 | 用途 | 参数 | 验证状态 |
| --- | --- | --- | --- |
| `GET /api/categories` | 获取按 `sort` 排序的分类列表 | 无 | 已验证 |
| `GET /api/products` | 获取在售商品分页列表 | `page``pageSize``categoryId``keyword` 均可选 | 已验证 |
| `GET /api/products/:id` | 获取一个在售商品的完整详情 | `id` 为稳定商品 ID | 已验证 |
### 商品数据字段
| 字段 | 含义 |
| --- | --- |
| `id``name``categoryId``status``sort` | 商品标识、名称、分类、在售状态和稳定排序。 |
| `price``originalPrice``leadTime` | 商品价格、划线原价和制作周期。 |
| `subtitle``description``story``scene` | 商品卖点、介绍、设计理念和使用场景。 |
| `images``iconImg``tone` | 商品图片、图标与详情页视觉主题色。 |
| `tags``specs``mask` | 商品标签、规格参数和定制画布信息。 |
### 可用商品 ID
| productId | 商品名称 | 对应分类 ID |
| --- | --- | --- |
| `notebook-small` | 微雕笔记本(小) | `cat-notebook-small` |
| `notebook-large` | 微雕笔记本(大) | `cat-notebook-large` |
| `coaster` | 铜质杯垫 | `cat-coaster` |
| `penbox` | 竹制笔盒 | `cat-penbox` |
| `booklamp` | 书本型灯 | `cat-booklamp` |
## 给其他成员的使用说明
| 成员 | 可以使用的商品数据 |
| --- | --- |
| 成员 2:设计清单 | 保存 `productId``productName``price``count`;设计数据中原样保留 `mask``tone`。 |
| 成员 3:订单 | 客户端只传 `productId``quantity`;订单服务端必须重新读取 `price` 计算金额。 |
| 成员 4:设计与生产 | 使用 `mask` 确定画布尺寸,使用 `tone` 作为主题色;生产任务保存商品 ID 与设计快照。 |
## 本机联调地址
- 后端接口:`http://127.0.0.1:3090`
- Swagger 接口页面:`http://127.0.0.1:3090/docs`
- 小程序导入目录:`wechat_wc/dist`
以上地址只适用于本机模拟器联调。真机和生产环境需要替换为已配置合法域名的 HTTPS 地址。