refactor: 资源服务 ResourceReferenceCheckHelper 抽取 16 处 fail-closed 模板代码 (PR #1841,前端无感)
PR #1838 follow-up,11 service 16 处调用点 8-10 行模板 → 1 行 helper 调用, 净减 178 行;API 行为完全一致,前端无需改动。 测试服 round-trip 实测 ScenicSpot batchDelete 反例 deniedReasons 含 13 个中文产品名 ✅
这个提交包含在:
父节点
eb91ded1ac
当前提交
b7e9e754b8
@ -0,0 +1,59 @@
|
||||
---
|
||||
date: 2026-05-08
|
||||
type: backend-refactor
|
||||
module: hl-resource-service
|
||||
priority: low
|
||||
notify: ["@mmg"]
|
||||
status: tested-passed
|
||||
restart_service: hl-resource-service
|
||||
gitea_pr: 1841
|
||||
gitea_issue: []
|
||||
---
|
||||
|
||||
# 资源服务 ResourceReferenceCheckHelper 抽取(纯重构,前端无感)
|
||||
|
||||
## 背景
|
||||
|
||||
PR #1838 引入 fail-closed 后,resource service 11 个文件 16 处调用点重复 8-10 行 `productFeignClient.checkResourceInUse + isSuccess + throw + getData + 被引用 throw` 模板。
|
||||
|
||||
PR #1841 抽取到 `ResourceReferenceCheckHelper`,2 个公开方法:
|
||||
- `throwIfInUse(type, id, errorCode)` — 单删除/下架场景
|
||||
- `getReferencingProducts(type, id)` — batchDelete 累积场景
|
||||
|
||||
每处调用点 8-10 行 → 1 行 helper 调用,**净减 178 行**(35 文件 +177/-355,加 helper+test +271 = 净增 87)。
|
||||
|
||||
## 前端可见变化
|
||||
|
||||
**完全无变化** — API 行为/响应/业务码全部保持一致。前端不需要任何改动。
|
||||
|
||||
测试服 round-trip 实测 (PR #1838 同样反例):
|
||||
```
|
||||
DELETE /admin/scenic/spots/batch ids=[3001000000000000016]
|
||||
HTTP=200 code=200
|
||||
data={successCount:0, deniedIds:["3001000000000000016"],
|
||||
deniedReasons:["被产品使用: 结婚不回家、带孩子, 看一次真正的草原。、...(13 个产品名)"]}
|
||||
post-check GET 景区仍存在 ✅
|
||||
```
|
||||
|
||||
## 重启服务
|
||||
|
||||
测试服已部署:`hl-resource-service`(PR #1841 合 dev → deploy panel)。
|
||||
|
||||
## 改造范围
|
||||
|
||||
11 个 service 文件 16 处调用点全部统一改用 helper:
|
||||
|
||||
- ScenicSpotService 4 处(updateStatus / batchUpdateStatus / batchDelete / submitApproval)
|
||||
- StaffService 2 处 / SuppliesService 2 处
|
||||
- HotelService / RoomTypeService / RestaurantService / ActivityService / ServiceItemService / SuppliesComboService / VehicleModelService / CostItemService 各 1 处
|
||||
|
||||
22 个既有 service test 同步切 mock(`ProductFeignClient` → `ResourceReferenceCheckHelper`)。
|
||||
|
||||
## 关联
|
||||
|
||||
- PR #1838 / #1839 / Issue #1821(纯重构 follow-up,无新工单)
|
||||
|
||||
## Follow-up(本 PR 不修)
|
||||
|
||||
- 余下 PR #1838 follow-up 项: RoomType 禁用按 HOTEL 维度校验语义偏严 / `product_itinerary_node(resource_type, resource_id)` 复合索引 / batchDelete TOCTOU 时序问题
|
||||
- 单测加 H2 集成测试或 @MybatisPlusTest 真跑 SQL 防止 mock 单测假阳(memory `experience/qa/mock-tests-pass-cr-pass-but-prod-schema-mismatch-real-deletes-2-resources.md`)
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户