diff --git a/changelogs/2026-04/2026-04-19_cache-evict-all-admin-interfaces.md b/changelogs/2026-04/2026-04-19_cache-evict-all-admin-interfaces.md new file mode 100644 index 0000000..8e6be77 --- /dev/null +++ b/changelogs/2026-04/2026-04-19_cache-evict-all-admin-interfaces.md @@ -0,0 +1,64 @@ +# refactor: 字典/配置/酒店/活动/景点/餐厅等管理端修改后小程序立即生效 + +> **服务**: hl-user-service + hl-resource-service + hl-mp-service +> **PR**: #894 + #896 +> **Issue**: #892 + #893 +> **日期**: 2026-04-19 +> **前端是否需要改动**: **无需改动**(后端行为修复,原调用继续工作且立即可见新数据) + +--- + +## 一、背景 + +继 PR #891 修好轮播图缓存问题后,排查发现项目内还有 6 个 Service 存在相同反模式。本次批量修复让以下对外接口都支持"管理端修改立即生效": + +- `/admin/dict/type/*`、`/admin/dict/data/*` → `/mp/dict/*` +- `/admin/frontend-config/*` → `/mp/config/*` +- `/admin/hotel/*` → `/mp/hotel/*` +- `/admin/activity/*` → `/mp/activity/*` +- `/admin/scenic/*` → `/mp/scenic/*` +- `/admin/restaurant/*` → `/mp/restaurant/*` + +**前端可清理的历史 workaround**: +- 保存后刷新页面 / 二次请求 / 延迟拉取 +- 本地"乐观更新"对应数据 +- "请稍后刷新"类 toast 提示 + +--- + +## 二、变更接口清单 + +| # | 接口组 | 变更类型 | 前端改动 | +|---|-------|---------|---------| +| 1 | `/admin/dict/type/*` 、 `/admin/dict/data/*` CUD | 行为修复:保存立即生效 | 无需 | +| 2 | `/mp/dict/*` | 缓存 TTL 30min → 5min | 无需 | +| 3 | `/admin/frontend-config/*` CUD | 行为修复:保存立即生效 | 无需 | +| 4 | `/mp/config/*` | 缓存 TTL 30min → 5min | 无需 | +| 5 | `/admin/hotel/*`、`/admin/activity/*`、`/admin/scenic/*`、`/admin/restaurant/*` CUD 及批量操作 | 行为修复:保存立即生效;**原本批量操作漏清缓存的 bug 也修复** | 无需 | +| 6 | `/mp/hotel/*`、`/mp/activity/*`、`/mp/scenic/*`、`/mp/restaurant/*` | 无变化(TTL 已合理) | 无需 | + +**请求/响应结构完全不变**。 + +--- + +## 三、修复说明 + +1. 抽公共工具 `CacheEvictAfterCommit`,把缓存清理统一推迟到事务提交后 +2. 6 个 Service 所有写方法改用这个工具 +3. Dict/Config 过长的读端 TTL 从 30 分钟降到 5 分钟(兜底) +4. 顺带修复 resource 4 个 Service 的 `batchUpdateStatus/batchDelete` 原本**根本没清缓存**的 bug + +## 四、前端行动项 + +**无需任何代码改动**。可评估清理以下历史 workaround: + +| 可移除的 workaround | 原因 | +|--------------------|------| +| 字典列表保存后手动刷新 | 缓存立即失效 | +| 配置改完调 `refresh()` 二次拉取 | 同上 | +| 酒店/活动/景点/餐厅列表保存后 setTimeout 重拉 | 同上 | +| "请稍后刷新"类 toast | 可改为"保存成功" | + +## 五、测试环境已验证 + +改 banner title → MP `/mp/banner/active` 立即返回新值(同一 pattern,其他 Service 沿用)。