左侧分类树/官网分类名的括号段(型号限定词(JSA002)与内容性括号 (黑+卡其)/(短裤 & 长裤))整段删除。分类名每小时被 SDS 同步覆盖, 清洗落在 syncCategories 入库路径(cleanCategoryDisplayName,款号 token 保留,剥空守卫),另附幂等存量脚本 fix:category-names。 已执行:V1/V2 各 33 条分类名去括号,复跑幂等 0。注意 api 容器重建 部署前旧镜像的下一轮同步会把名称写回原文,部署后自动恢复干净。 Tests: api 23 suites/206 passed(含新增 category-name.spec 7 例),tsc clean
61 lines
2.7 KiB
Markdown
61 lines
2.7 KiB
Markdown
# 分类名去括号(DG001 180G纯棉T恤(JSA002) → DG001 180G纯棉T恤)
|
||
|
||
- 分支:`bugfix/category-name-parens-yeuimu`(自 `develop`)
|
||
- 日期:2026-09-03
|
||
- 类型:Bug 修复 / 数据修复
|
||
- 前置:`pure-sku-good-name-fix.md`(商品名已统一「品名 SKU」,goods 表已无括号)
|
||
|
||
## 问题
|
||
|
||
后台左侧分类树(admin 左栏 + 官网分类树/商品卡共用)部分分类名带括号,两栈各
|
||
33 条,分两类:
|
||
|
||
- 型号限定词:`DG001 180G纯棉T恤 (JSA002)`
|
||
- 内容性括号:`YSM02 全棉斜纹拼色帽子(黑+卡其)`、`下装(短裤 & 长裤)`
|
||
|
||
用户要求:括号段**整段删除**。
|
||
|
||
## 关键约束
|
||
|
||
`categories.category_name` 是每小时 cron(`syncCategories`)从 SDS 分类树**强制覆盖**
|
||
的镜像(update 分支无条件写 `node.name`)——只改库会被下一轮同步冲回。清洗必须
|
||
落在**同步入库路径**才能持久;镜像其余字段(icon/树结构)行为不变。
|
||
|
||
## 实现
|
||
|
||
### 1. 同步入库清洗(apps/api/src/sync/sync.service.ts)
|
||
|
||
- [x] 导出纯函数 `cleanCategoryDisplayName(name)`:删除所有 `(…)`/`(…)`
|
||
括号段(含半角),折叠多余空白;剥空(名称仅剩括号段)时原样返回。
|
||
- [x] `syncCategories` upsert 的 create/update 分支均写清洗后的名称
|
||
(SDS 原文不再落库;款号 token `DG001` 保留,codeFromCategoryName 不受影响)。
|
||
|
||
### 2. 存量回填脚本
|
||
|
||
- [x] `apps/api/prisma/fix-category-parens.ts` + npm script `fix:category-names`
|
||
(默认 dry-run 打印 旧名 → 新名,`-- --apply` 写库,幂等;覆盖 SDS 与人工
|
||
建的分类)。
|
||
|
||
### 3. 测试(TDD)
|
||
|
||
- [x] `src/sync/category-name.spec.ts`:型号限定词/内容性括号/多括号段/半角/
|
||
剥空守卫/无括号原样/空白折叠。
|
||
- [x] 全量 api 测试零回归(一次性 docker postgres)。
|
||
|
||
## 落库(2026-09-03 执行)
|
||
|
||
- [x] V1/V2 各 33 条分类名去括号,复跑 dry-run 0 条。
|
||
- 注意:**api 容器重建部署前**,旧镜像的每小时同步会把名称写回带括号原文;
|
||
部署带清洗逻辑的新镜像后,下一轮同步自动恢复干净(无需再跑脚本)。
|
||
|
||
## 已知影响
|
||
|
||
- `下装(短裤 & 长裤)` 两行同名分类清洗后均为 `下装`(清洗前已是同文重复,
|
||
树中原即并列两行,视觉不变差)。
|
||
- `configure:product-center-icons` 脚本按中文名幂等更新图标:其词表若含带括号
|
||
名称将匹配不到已清洗行,需要时更新词表(本次核查无带括号配置项受影响)。
|
||
|
||
## 权限评估
|
||
|
||
无新增端点/操作;CLI 脚本为运维通道 —— 无需新增权限项。
|