yeuimu
|
93ac525c55
|
refactor(api): parsing out of runtime — pure-mirror sync, explicit organize, auto aggregate recompute
解析去运行时化(三层架构,plans/refactor/organize-script-refactor.md):
- 同步 = 纯镜像:upsertOriginGood 不再写解析列、不再自动挂族;详情同步仍触发重算
- 整理 = 显式人工动作(OrganizeService):解析列回填 → 派生标签(人工接管永不
覆盖)→ auto-group 建族 → 全量重算;入口 CLI(pnpm --filter @inkreach/api
organize)+ POST /product-families/organize + 后台「整理」按钮
- 重算 = 纯结构化聚合:不再按名称重派生标签(防上游改名倒灌,回归测试覆盖);
矩阵维度只认标签/CUSTOM 显式标签,未整理成员不进矩阵;工艺=不打印时
印花数量以单面占位(纯结构化规则);「恢复自动」走整理的单链接派生
- 派生默认补齐(脚本层假设):名称无单/双面且工艺非不打印 → 印花数量单面印花
- goods 服务建品/更新后仅镜像标签+重算(不派生);含商品名入库规范化
(normalizeGoodName,管理员输入边界质检)
- organize.service.spec 由 tag-sync spec 迁移 + 防倒灌回归;sync/recompute/
public/families spec 全部适配;API 173/173,admin typecheck+22/22
|
2026-08-30 01:27:01 +08:00 |
|
yeuimu
|
6498a198ef
|
fix(parser): normalize half/full-width bracket mix in link name segment 1
SDS 上游存在 '美国(不包邮)…' 混用括号:先归一为全角再配对,
否则国家/物流/品名三字段全部解析失败
|
2026-08-29 02:36:26 +08:00 |
|
yeuimu
|
8a052773cd
|
feat(public): family-first contract — goodId=familyId, strict 5-dim price matrix
公开契约族化(前端只需知道款号/族):
- GET /public/goods 一族一条(goodId=族ID,price=族起价,分页作用于分组后);
无族商品(自定义)不进任何公开端点(列表/首页/分类树/标签统计)
- GET /public/goods/:goodId 仅认族 ID;公共字段取代表 Good,变体=全体成员并集,
尺码表/包装规格=族物化并集;旧 SDS 链接 ID 寻址 404
- priceMatrix 严格五维:尺码×颜色×印花数量×工艺×物流;维度来源改为链接级
标签(人工接管按人工标签),弃用原始 craftLabel;CUSTOM 成员尊重显式标签
- 名称派生补裸「单面/双面」写法(直喷双面→双面印花+直喷,18 条存量链接修复)
- family_price_overrides 加 print_count 列(五键唯一),PUT/DELETE/校验五键化
- admin 编辑弹窗矩阵消费适配(SKU 列直读 printCount,成员格子三维匹配,
改价 payload 带 printCount)
- 存量 339 族已全量重算;api 162/162、admin 22/22、双端构建绿
|
2026-08-28 18:43:30 +08:00 |
|
yeuimu
|
10197c47a8
|
refactor(admin): split GoodsView into dialog components; fix(GoodsView): raw member names, no primary badges, member price grid; feat(tag): 光板 maps to 不打印
|
2026-08-28 16:40:48 +08:00 |
|
yeuimu
|
08201f18a4
|
feat(product-family): link-level tags (origin_good_tags) with manual override + member detail enrichment
|
2026-08-28 16:00:46 +08:00 |
|
yeuimu
|
ee336968a0
|
feat(product-family): derive tags per link name (印花数量/工艺/物流 rules)
|
2026-08-28 15:33:11 +08:00 |
|
yeuimu
|
eedfbb344e
|
feat(product-family): auto-derive logistics/craft tags from family members
|
2026-08-28 14:57:25 +08:00 |
|
yeuimu
|
4eadb67c36
|
feat(product-family): replace legacy good merge with family mechanism in config view and public detail
|
2026-08-28 14:14:58 +08:00 |
|
yeuimu
|
6418aa7302
|
feat(api): public good detail family block behind gray-release flag
|
2026-08-28 13:40:19 +08:00 |
|
yeuimu
|
ab450c350e
|
fix(api): tolerant member attach in auto-group under concurrent cleanup
|
2026-08-28 12:52:22 +08:00 |
|
yeuimu
|
502b7eba6e
|
docs: update references for product families; fix controller import and test isolation
|
2026-08-28 12:50:42 +08:00 |
|
yeuimu
|
c8531bfe08
|
feat(api): category-based family grouping, tree family info and custom goods family attribution
|
2026-08-28 12:43:58 +08:00 |
|
yeuimu
|
d63f1a6f35
|
feat(api): product families backfill script
|
2026-08-28 12:36:39 +08:00 |
|
yeuimu
|
f68898dea4
|
feat(api): product families module with CRUD, auto-group, members, custom members and price overrides
|
2026-08-28 12:30:57 +08:00 |
|
yeuimu
|
de0f5509b1
|
feat(api): add family recompute service with union and price matrix
|
2026-08-28 12:27:29 +08:00 |
|
yeuimu
|
60946b5f64
|
feat(api): add origin good name parser
|
2026-08-28 12:23:35 +08:00 |
|