diff --git a/changelogs/2026-04/2026-04-20_mp-product-category-field.md b/changelogs/2026-04/2026-04-20_mp-product-category-field.md new file mode 100644 index 0000000..b565acd --- /dev/null +++ b/changelogs/2026-04/2026-04-20_mp-product-category-field.md @@ -0,0 +1,74 @@ +# /mp 产品详情 & 列表补 `category` 字段 + +**日期**: 2026-04-20 +**PR**: #1010 +**服务**: hl-product-service-v2 + +## 背景 +管理端可以给产品配「产品分类」(`产品分类 *`:亲子游 / 蜜月旅行 / 摄影之旅 / 深度体验 / 自驾越野),保存后 DB 里 `product.category` 有值;但小程序详情 + 卡片列表拿不到这个字段,无法按分类展示或筛选。 + +## 改动 +在下列两个响应 VO 顶层加 `category: string`(字典 `product_category`): + +| 接口 | VO | +|------|----| +| `GET /mp/product/{id}` | `MpProductDetailRespVO.category` | +| `GET /mp/product-line/{lineId}/products` | `MpProductListRespVO.category`(每项) | + +## 字典 product_category +| 值 | 中文 | +|-----|------| +| `family` | 亲子游 | +| `honeymoon` | 蜜月旅行 | +| `photography` | 摄影之旅 | +| `experience` | 深度体验 | +| `driving` | 自驾越野 | + +未配置的老产品 `category=null`,前端按空兜底即可。 + +## 响应示例 + +### `GET /mp/product/2045345825172639746` +```json +{ + "code": 200, + "data": { + "productId": "2045345825172639746", + "productType": "CORE", + "category": "photography", // 新增 + "name": "游牧的森林-短途版", + "subtitle": "呼伦贝尔南线4天3晚秋色短途版", + "...": "..." + } +} +``` + +### `GET /mp/product-line/{lineId}/products` +```json +{ + "code": 200, + "data": [ + { + "productId": "2042549263955648513", + "productType": "CORE", + "category": "photography", // 新增 + "name": "测试核心产品", + "...": "..." + } + ] +} +``` + +## 已有能力(未变化) +- `GET /mp/product-line/{lineId}/products?category=photography` —— `category` 筛选参数之前已经支持,本次只补响应字段。 + +## 缓存 +- `mp:product:detail:{id}`、`mp:products-by-line:{lineId}[:cat:{category}]` +- 部署时异步清过一次;旧结构 JSON 不含 `category`,反序列化不会报错(只是取到 null),TTL 5–10 分钟内自愈。 + +## 存量数据 +**无需迁移**。`product.category` 已长期存在于 DB。之前只是响应未透出。 + +## 前端建议 +- 直接从顶层读 `banner_card_item.category` / `product_detail.category` +- 无值时按「未分类」显示或不展示标签