Quickstart 验证: 商品规格
Feature: 013-food-spec | Date: 2026-07-15
手动端到端验证(项目无自动化测试)。接口契约见 contracts/api.md,数据模型见 data-model.md。
前置
- 数据库已执行
updatesql/sql.md 中三张规格表的 DDL。
- 存在一个门店(mdId=3)与至少一个商品(
pos_food 记录)。
- 商家账号 token 可用。
场景 1:规格模板管理
- POST /chanting/foodSpec/saveFoodSpec,建"甜度"(单选/必选) + 规格值 无糖(0)/半糖(0)/全糖(0)。
- GET /chanting/foodSpec/foodSpecPageList?mdId=3 → 列表含该规格及 3 个值。
- GET /chanting/foodSpec/getSpecs?id={id} → 详情正确。
- GET /chanting/foodSpec/changeOpen?id={id}&isOpen=false → 再查 getAvailableSpecsList 不含该规格。
预期:增删改查、启停、软删均生效;跨门店(mdId=4)查询不可见。
场景 2:商品挂规格
- GET /chanting/foodSpec/getAvailableSpecsList?mdId=3 → 拿到可用规格。
- POST /chanting/food/setposfood,商品带 foodSpecs=[甜度, 加料]。
- GET /chanting/food/getfood?id={foodId} → 返回 foodSpecs 含甜度 + 加料。
预期:food_spec_relation 写入 2 条;food_sku JSON 同步更新;重新勾选(减为仅甜度)后关联更新为 1 条。
场景 3:列表返回规格
- GET /chanting/food/getidlist(含该商品)→ 每条商品带 foodSpecs。
- GET /chanting/food/stallFoodList、/foodSearch 同样带规格。
预期:列表注入规格结构完整、仅含启用项;无规格商品返回空规格。
场景 4:计价一致性
- 顾客选 全糖(加价 0) + 珍珠(加价 5) 下单。
- 检查订单快照 otherPrice = 5;订单单价 = 商品价 + 5。
- 若参与促销,specPrice = 5 正确叠加。
预期:otherPrice / specPrice / 规格加价三者一致,金额 0 误差。
场景 5:兼容性
- 仅用旧
food_sku JSON(不经关联表)的历史商品:列表/详情仍能返回规格 JSON,不报错。
- 后台 add/edit 编辑商品:规格能正确持久化(FR-011)。