12_refactor drop iconSvg+sellingPoint reuse description (PR HL#2091 + hotfix #2092)

这个提交包含在:
API Changelog Bot 2026-05-12 14:44:04 +08:00
父节点 2f33d84db6
当前提交 586ba5c6db

查看文件

@ -0,0 +1,88 @@
# 后端 refactor 通知 — 删除冗余 iconSvg / sellingPoint, 改读 description / emojiIcon
**日期**: 2026-05-12
**类型**: 后端重构 (PR #2091 + hotfix #2092)
**模块**: 资源服务 (scenic_spot / activity / service_item) + 产品行程节点 (product_itinerary_node)
**通知**: @mmg
**前端是否需改动**: **需要小调整** — 改字段名读取
**严重性**: P2 (API 响应字段下线)
---
## 背景
PR #2076 (#2068) 给资源 3 类 + 产品行程节点各新加了 2 字段:
- `iconSvg` (TEXT, SVG 源码)
- `sellingPoint` (VARCHAR 500, 卖点简介)
但这些表里**本来就有完全能承担相同语义的字段**:
- `description` (TEXT) — 长描述, 可以放卖点文案
- 节点 `emojiIcon` (lucide 名字符串) — 节点图标
- 资源 `cover_material_id` — 资源图
两套字段并存维护成本高且无收益, 故本次反悔, 全删新加字段, 复用现有。
---
## API 响应变化
### 资源 (scenic_spot / activity / service_item)
`GET /admin/scenic/spot/{id}` / `GET /admin/activity/...` / `GET /admin/service-item/...`:
- ❌ 删除 `iconSvg` 字段
- ❌ 删除 `sellingPoint` 字段
- ✅ 保留 `description` (TEXT) — 用此放卖点文案
- ✅ 保留 `coverMaterialId` (BIGINT) — 用此放资源图
`POST /admin/scenic/spot` / `PUT /admin/scenic/spot/{id}` 等保存接口:
- ❌ 不再接受 `iconSvg` / `sellingPoint` 字段 (Spring/Jackson 静默忽略, 不会 400)
### 产品行程节点 (product_itinerary_node)
`GET /admin/product/item/{id}``data.itinerary[].nodes[]`:
- ❌ 删除 `iconSvg`
- ❌ 删除 `sellingPoint`
- ✅ 保留 `description` (TEXT) — 用此放卖点/详细描述
- ✅ 保留 `emojiIcon` (字符串, lucide 图标名) — 用此放节点图标
`POST /admin/product/item/{id}/itinerary/day` 等保存接口同上, 不再接受这两字段。
MP 端 `MpProductDetailRespVO`, 内部 Feign `InternalProductDetailVO` / `ItineraryNodeItem` / `MpProductDetailInternalVO` 同步去字段。
---
## 前端 mmg 行动项
1. **资源 admin 编辑页**: 如有 "SVG 图标" / "卖点简介" 单独输入框, 删掉; 把内容并到 description 长文本编辑器
2. **产品行程编排页**: 节点的 "SVG 图标" 入口下线, 节点图标继续用 emojiIcon (lucide 名选择器); "卖点简介" 输入框并入 description
3. **MP 商品详情/今日体验**: 节点展示读 `description` 替代 `sellingPoint`, 读 `emojiIcon` 替代 `iconSvg`
如果之前没改过 — 当前前端代码可能就还在读 description/emojiIcon, 那就不用动了。
---
## 测试服实测结果
部署版本: dev `4422274c` (PR #2091 + hotfix #2092)
| 接口 | 字段验证 |
|------|---------|
| `GET /admin/scenic/spot/{id}` | iconSvg=❌ sellingPoint=❌ description=✅ |
| `GET /admin/product/item/{id}` 节点 (13 真实节点) | iconSvg=❌ sellingPoint=❌ description=✅ emojiIcon=✅ |
| `flyway_schema_history` V20260512.003 | success=1, 4 表对应列已删 |
---
## DB Schema 变化 (前端无关, 仅记录)
V20260512_003 迁移 (两库各一份):
```sql
ALTER TABLE scenic_spot DROP COLUMN icon_svg, DROP COLUMN selling_point;
ALTER TABLE activity DROP COLUMN icon_svg, DROP COLUMN selling_point;
ALTER TABLE service_item DROP COLUMN icon_svg, DROP COLUMN selling_point;
ALTER TABLE product_itinerary_node DROP COLUMN icon_svg, DROP COLUMN selling_point;
```
(P0: V001/V002 历史保留不动, 加 forward 删列 V003)
注: 部署时遇到 MySQL 8 不支持 `DROP COLUMN IF EXISTS` 问题, hotfix PR #2092 改成 `ALTER TABLE x DROP COLUMN a, DROP COLUMN b` 单语句多列形式修复。