diff --git a/changelogs/2026-04/2026-04-20_mp-banner-active-top-level-seasons.md b/changelogs/2026-04/2026-04-20_mp-banner-active-top-level-seasons.md new file mode 100644 index 0000000..439f09b --- /dev/null +++ b/changelogs/2026-04/2026-04-20_mp-banner-active-top-level-seasons.md @@ -0,0 +1,43 @@ +# /mp/banner/active 响应顶层新增 seasons 字段 + +**日期**: 2026-04-20 +**PR**: #1003 +**服务**: hl-user-service + +## 改动 +`BannerVO` 顶层新增 `seasons: List`: +- 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"] +```