Files
cmautobuy/docs/task/31-admin-pdd-店铺与价格采样粒度.md
T
chengmaandClaude Opus 5 4022feee43 docs: 记录 #31 #32 验收通过
两份归档都由实现方写好,本次只更新状态。

#31 遵守了 #20 立的「迁移只追加」规则:v4 用 ALTER TABLE 加 shop_name,
v1/v2 原文未动,CheckSchema 也覆盖了新列。

#32 的 skus 是颜色×尺码的笛卡尔积并带 price_observed_at,
与 #31 的 price_granularity 对得上——两侧独立得出同一结论。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 10:19:11 +08:00

4.1 KiB
Raw Blame History

31 Admin:采集结果增加店铺名与价格采样粒度

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / MVP
  • 状态:验收通过
  • 日期:2026-08-07
  • Gitea 工单:#31

背景与目标

原有采集结果只能保存商品标题和规格价格,无法区分同名商品来自哪家店铺, 也没有说明价格是逐个 SKU 实测还是按颜色采样后推断。

本任务让 Admin 保存并显示店铺名,同时在按颜色采样时明确标出实测价和推断价, 避免操作员和后续价格保护把推断价格误认为逐 SKU 实测价格。

最终方案

  • 新增数据库版本 v4,通过 ALTER TABLE 为 pdd_products 添加可空的 shop_name。已发布的 v1/v2 和特殊 v3 迁移定义没有改写。
  • 迁移顺序明确为 v1/v2 → 特殊 v3 → v4;启动自检增加 shop_name 列检查。
  • Client 提交的 shop_name 落到商品表;本次没传或传空值时保留已有店铺名。
  • price_granularity 和 price_observed_at 继续随完整 pdd_data 保存在 skus_json,不增加重复数据库列。
  • PDD 商品列表增加“店铺”列,详情增加店铺信息。
  • 当 price_granularity 为 color 时,规格表显示采样说明和“价格来源”列; options 与 price_observed_at 完全一致的行显示“✓ 实测”,其余显示“推断”。
  • 旧 Client 不传新字段时继续正常提交;非空的未知价格粒度会被拒绝。
  • 为便于自动验证,把路由组装提取为 newRouter,使用临时数据库和 httptest 检查五个主页面及 PDD 详情渲染,不占用真实端口和数据库。

与建单方案的差异:v3 是不能放进纯 SQL 切片的特殊迁移,因此 v4 使用独立的 SQL 迁移列表,在 v3 完成后执行;没有为 v3 添加占位项,避免全新库跳过 v3。

改了哪些

  • admin/repository/db.go、migrate_test.go:v4、关键列自检和三起点迁移测试。
  • admin/model/model.go、repository/pdd.go:商品模型、查询和店铺名落库。
  • admin/service/submit.go、submit_test.go:解析新字段、兼容旧报文并验证落库。
  • admin/service/pdd.go、pdd_page_test.go:列表和详情视图、实测/推断判断。
  • admin/templates/pdd/*.html:显示店铺、价格采样提示和文字标记。
  • admin/main.go、main_test.go:可测试的路由组装和页面 HTTP 冒烟测试。
  • docs/admin/03-data-model.md、04-client-api.md、05-ui-specification.md: 同步数据、接口和界面规范。
  • docs/client/04-admin-api-contract.md:同步 Client 提交契约。

验收结果

验收标准 结果
v4 是新增迁移,未改写已发布迁移定义 通过
全新库、v2 老结构库、v2 新结构库迁移后结构一致 通过
shop_name 可空,老数据迁移后保持 NULL 通过
提交店铺名后落库并在列表和详情显示 通过
不带店铺名的旧报文不覆盖已有值 通过
按颜色采样时显示说明和“✓ 实测 / 推断”文字 通过
price_cent 使用实付价的规则写入两侧文档 通过
未知 JSON 字段和不带新字段的旧 Client 继续兼容 通过
五个主页面通过 HTTP 200 冒烟测试 通过
格式、静态检查、构建和全量测试通过 通过

测试

  • 执行的命令:

    cd D:\chengma\cmautobuy\admin
    gofmt -l .
    go vet ./...
    go build ./...
    go test ./... -count=1
    go test ./repository/ -run Migrate -v -count=1
    git diff --check
    
  • 结果:全部通过。自动测试验证五个主页面返回 200,并验证 PDD 详情包含店铺名、 价格采样提示、“✓ 实测”和“推断”。

  • 没验证到的部分:尚未由 #32 的真实 Client 和 Android 手机完成端到端提交; 尚未在真实浏览器中人工检查 1366×768 下新增列的视觉效果。接口、迁移和模板 渲染已通过自动测试。

相关提交

  • 93beef8 feat: 保存并展示 PDD 店铺与价格采样信息 (#31)