# 分类名去括号(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 脚本为运维通道 —— 无需新增权限项。