From 9f8ffadaa3ba90db6d7af3b6b738370056126cc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=B8=96=E7=9D=BF?= <2839904623@qq.com> Date: Sun, 21 Jun 2026 11:49:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(compare):=20=E9=80=90=E5=B9=B3=E5=8F=B0=20?= =?UTF-8?q?status/store=5Fclosed=20=E8=90=BD=E5=BA=93=20+=20platform=5Fres?= =?UTF-8?q?ults=20=E6=94=B6=20dict?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ComparisonResultIn 加 status / store_closed, 记录页按平台显示异常文案 - platform_results 声明为 dict(pricebot 按 platform_id 键的 dict), 修成功记录 422 被拒 Co-Authored-By: Claude Opus 4.8 (1M context) --- app/schemas/compare_record.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/schemas/compare_record.py b/app/schemas/compare_record.py index 23c0fea..aae1890 100644 --- a/app/schemas/compare_record.py +++ b/app/schemas/compare_record.py @@ -51,6 +51,13 @@ class ComparisonResultIn(BaseModel): # 跟 coupon_saved 并存, 是更丰富的明细; 空=没抠到 → 前端回退单券路径。 # 必须显式声明: 落库走 model_dump(), pydantic 默认丢未知字段, 不声明这行会被悄悄吞掉。 applied_coupons: list[AppliedCouponIn] = Field(default_factory=list) + # 逐平台状态(客户端上报前把 done.params 的 comparison_results + platform_results.status 合并写入): + # success / below_minimum / store_closed / store_not_found / items_not_found / unsupported / failed。 + # 「比价记录」页据此对无价平台显示对应文案(未满起送价/门店打烊/店家未入驻/比价失败)。 + # 必须显式声明: 落库走 model_dump(), 不声明会被 pydantic 静默丢弃 → 记录页拿不到 status。 + status: str | None = None + # 门店打烊原因(price 为 None 时带): 与 status="store_closed" 等价的更早信号, 一并落库供前端兜底判打烊。 + store_closed: str | None = None class ComparisonRecordIn(BaseModel): @@ -73,6 +80,8 @@ class ComparisonRecordIn(BaseModel): # unsupported/...)。来自 done.params.platform_results,客户端透传;落 raw_payload(不单列), # admin「卡在哪一步」从这里读。dict{platform_id: {...}} 宽松存(结构由 pricebot 定——是 # 按平台 id 索引的 dict 而非 list,只作 debug 展示)。 + # ⚠️ 早先误声明成 list → 每条成功记录 422 被拒、记录页只剩失败/终止 + # (2026-06-17 引入 platform_results 上报后复现);改 dict 后修复。 platform_results: dict = Field(default_factory=dict) skipped_dish_count: int | None = None skipped_dish_names: list[str] = Field(default_factory=list)