fdd3d8cf9b
京东秒送接入: 店铺身份是两个稳定数字 id —— storeId 进 id_jd(同 taobao shopId→id_taobao), venderId(deeplink 还需、商家维度)单列存 jd_vender_id; 另加 jd_share_url/jd_resolved_url/ jd_deeplink 原料列(与 taobao_*/meituan_* 平行)。迁移 store_mapping_jd_cols 加这 4 列 + jd_vender_id 索引。 顺手修一个潜在 bug: upsert 的首写(INSERT)原来硬编码只灌 taobao+通用列, 首写的若是美团/ 京东腿, 它们的列不在构造器里会被丢。改成按 _MERGE_COLUMNS 逐列 setattr, 任意平台首写都全量 落库(美团也受益)。合并(填空不覆盖)逻辑不变。 验证: 迁移单 head、store_mapping 无新漂移; TestClient 打真 PG —— 京东首写 4 列全落 → 淘宝同 trace 合并填淘宝列、不覆盖京东列。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""平台店铺映射内部上报的收发模型。
|
|
|
|
pricebot 在淘宝比价拿到 shopId 后 server→server POST 一行映射。所有字段可空(按比价
|
|
角色稀疏填充),server 端只校验共享密钥 + 幂等(trace_id)落库。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class StoreMappingIn(BaseModel):
|
|
"""一次比价的跨平台店铺映射上报体(一行)。"""
|
|
|
|
trace_id: str
|
|
business_type: str = "food"
|
|
source_platform: str | None = None
|
|
|
|
# 跨平台身份(按角色稀疏填充)
|
|
id_taobao: str | None = None
|
|
name_taobao: str | None = None
|
|
id_meituan: str | None = None
|
|
name_meituan: str | None = None
|
|
id_jd: str | None = None
|
|
name_jd: str | None = None
|
|
|
|
# 地理
|
|
city: str | None = None
|
|
geohash: str | None = None
|
|
lng: float | None = None
|
|
lat: float | None = None
|
|
taobao_address: str | None = None
|
|
|
|
# 溯源
|
|
source_device_id: str | None = None
|
|
source_user_id: int | None = None
|
|
|
|
# 淘宝原料(可复跳 / 可重解析 / 调试)
|
|
taobao_share_url: str | None = None
|
|
taobao_resolved_url: str | None = None
|
|
taobao_deeplink: str | None = None
|
|
|
|
# 美团原料(poi_id_str 非稳定主键, 单列存; 见 model 注释)
|
|
meituan_poi_id_str: str | None = None
|
|
meituan_share_url: str | None = None
|
|
meituan_resolved_url: str | None = None
|
|
meituan_deeplink: str | None = None
|
|
|
|
# 京东原料(venderId 单列存, storeId 进 id_jd; 见 model 注释)
|
|
jd_vender_id: str | None = None
|
|
jd_share_url: str | None = None
|
|
jd_resolved_url: str | None = None
|
|
jd_deeplink: str | None = None
|
|
|
|
attrs: dict | None = None
|
|
|
|
|
|
class StoreMappingOut(BaseModel):
|
|
"""上报结果。inserted=1 为新建该 trace 行,0 为合并进已存在行(填空,不覆盖);
|
|
row_id 为该 trace 对应行 id。"""
|
|
|
|
inserted: int
|
|
row_id: int | None = None
|