44 行
1.4 KiB
Markdown
44 行
1.4 KiB
Markdown
# /mp/banner/active 响应顶层新增 seasons 字段
|
||
|
||
**日期**: 2026-04-20
|
||
**PR**: #1003
|
||
**服务**: hl-user-service
|
||
|
||
## 改动
|
||
`BannerVO` 顶层新增 `seasons: List<String>`:
|
||
- banner 绑定产品(linkType=PRODUCT)→ 继承 `product.seasons`
|
||
- banner 绑定产品线(linkType=PRODUCT_LINE)→ 继承 `product_line.seasons`
|
||
- 其他绑定类型(URL/PAGE/NONE/...)或目标被删 → `seasons=null`
|
||
|
||
## 响应示例
|
||
```json
|
||
{
|
||
"id": "...",
|
||
"title": "2026 草原夏令营",
|
||
"linkType": "PRODUCT",
|
||
"linkId": "2044306857534636034",
|
||
"seasons": ["summer", "winter"], // 新增:顶层
|
||
"linkTarget": {
|
||
"type": "PRODUCT",
|
||
"name": "...",
|
||
"seasons": ["summer", "winter"] // 原已存在:嵌套
|
||
}
|
||
}
|
||
```
|
||
|
||
## 前端建议
|
||
- **推荐**:直接读 `banner.seasons`(顶层),便于按季节筛选
|
||
- 如需更多目标信息(name/coverImageUrl)继续从 `banner.linkTarget` 取
|
||
|
||
## 存量数据
|
||
**纯运行时继承**,不存 DB。banner 表无 seasons 列。每次请求根据 linkType/linkId 即时从产品/产品线 seasons 回填。
|
||
|
||
## 缓存
|
||
Redis `banner:active:list:v3`(TTL 5 分钟)。之前版本 `v2` 被 bump 抛弃,确保旧 VO 结构不回吐。管理端新增/修改/删除 banner 时异步清缓存。
|
||
|
||
## 验证(测试环境)
|
||
```
|
||
banner 1: linkType=PRODUCT seasons=["summer","winter"]
|
||
banner 2: linkType=PRODUCT_LINE seasons=["summer"]
|
||
```
|