Files
inkreach-official-website/plans/fix/category-name-parens-fix.md
T
yeuimu 814f45c5a3 fix(categories): 分类名去括号——同步入库整段删除括号段
左侧分类树/官网分类名的括号段(型号限定词(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
2026-09-03 01:20:17 +08:00

2.7 KiB
Raw Blame History

分类名去括号(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 是每小时 cronsyncCategories)从 SDS 分类树强制覆盖 的镜像(update 分支无条件写 node.name)——只改库会被下一轮同步冲回。清洗必须 落在同步入库路径才能持久;镜像其余字段(icon/树结构)行为不变。

实现

1. 同步入库清洗(apps/api/src/sync/sync.service.ts

  • 导出纯函数 cleanCategoryDisplayName(name):删除所有 (…)/(…) 括号段(含半角),折叠多余空白;剥空(名称仅剩括号段)时原样返回。
  • syncCategories upsert 的 create/update 分支均写清洗后的名称 (SDS 原文不再落库;款号 token DG001 保留,codeFromCategoryName 不受影响)。

2. 存量回填脚本

  • apps/api/prisma/fix-category-parens.ts + npm script fix:category-names (默认 dry-run 打印 旧名 → 新名,-- --apply 写库,幂等;覆盖 SDS 与人工 建的分类)。

3. 测试(TDD

  • src/sync/category-name.spec.ts:型号限定词/内容性括号/多括号段/半角/ 剥空守卫/无括号原样/空白折叠。
  • 全量 api 测试零回归(一次性 docker postgres)。

落库(2026-09-03 执行)

  • V1/V2 各 33 条分类名去括号,复跑 dry-run 0 条。
  • 注意:api 容器重建部署前,旧镜像的每小时同步会把名称写回带括号原文; 部署带清洗逻辑的新镜像后,下一轮同步自动恢复干净(无需再跑脚本)。

已知影响

  • 下装(短裤 & 长裤) 两行同名分类清洗后均为 下装(清洗前已是同文重复, 树中原即并列两行,视觉不变差)。
  • configure:product-center-icons 脚本按中文名幂等更新图标:其词表若含带括号 名称将匹配不到已清洗行,需要时更新词表(本次核查无带括号配置项受影响)。

权限评估

无新增端点/操作;CLI 脚本为运维通道 —— 无需新增权限项。