From f0b7f3951ead9c56c58efa2ec44eabd4a1b0fb02 Mon Sep 17 00:00:00 2001 From: guke Date: Mon, 27 Jul 2026 16:01:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:ComparisonResultIn=20?= =?UTF-8?q?=E8=A1=A5=20skipped=5Fdish=5Fcount(=E9=80=90=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E7=BC=BA=E8=8F=9C=E6=95=B0=E8=90=BD=E5=BA=93)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pricebot 把逐平台缺菜数冗余进 comparison_results 每行,但上报入参 schema ComparisonResultIn 未声明该字段,model_dump() 会在 POST 路径静默丢弃, 记录页三平台网格拿不到逐格「缺少 X 个菜品」。显式声明补齐 + 回归测试。 Co-Authored-By: Claude Opus 4.8 (1M context) --- app/schemas/compare_record.py | 4 ++++ tests/test_comparison_result_in_skipped.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 tests/test_comparison_result_in_skipped.py diff --git a/app/schemas/compare_record.py b/app/schemas/compare_record.py index 3887bf0..0c16e52 100644 --- a/app/schemas/compare_record.py +++ b/app/schemas/compare_record.py @@ -85,6 +85,10 @@ class ComparisonResultIn(BaseModel): status: str | None = None # 门店打烊原因(price 为 None 时带): 与 status="store_closed" 等价的更早信号, 一并落库供前端兜底判打烊。 store_closed: str | None = None + # 该平台缺菜(漏菜)数量(pricebot 冗余进 comparison_results 行): 有价但少买了菜时 >0。 + # 记录页三平台网格据此逐格标"缺少 X 个菜品"(网格只拿 comparison_results, 拿不到 platform_results)。 + # 必须显式声明: 落库走 model_dump(), 不声明会被 pydantic 静默丢弃 → 记录页拿不到数量。 + skipped_dish_count: int | None = None class ComparisonRecordIn(BaseModel): diff --git a/tests/test_comparison_result_in_skipped.py b/tests/test_comparison_result_in_skipped.py new file mode 100644 index 0000000..7cd9653 --- /dev/null +++ b/tests/test_comparison_result_in_skipped.py @@ -0,0 +1,17 @@ +"""ComparisonResultIn 保留逐平台 skipped_dish_count(落库/回读用)。 + +记录页三平台网格要按逐平台缺菜数标"缺少 X 个菜品"; pricebot 现把 skipped_dish_count 冗余进 +comparison_results 行。上报边界必须显式声明该字段, 否则 model_dump() 会静默丢弃(POST 路径), +记录页拿不到。纯 schema, 不碰 DB。 +""" +from app.schemas.compare_record import ComparisonResultIn + + +def test_comparison_result_in_preserves_skipped_dish_count(): + r = ComparisonResultIn(platform_id="jd_waimai", price=25.0, skipped_dish_count=2) + assert r.model_dump().get("skipped_dish_count") == 2 + + +def test_comparison_result_in_skipped_defaults_none(): + r = ComparisonResultIn(platform_id="meituan", price=42.0, is_source=True) + assert r.model_dump().get("skipped_dish_count") is None -- 2.52.0