Commit Graph

3 Commits

Author SHA1 Message Date
marco fdd3d8cf9b feat(store_mapping): 加京东原料列 + upsert 首写泛化(任意平台首写不丢列)
京东秒送接入: 店铺身份是两个稳定数字 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>
2026-06-13 22:35:39 +08:00
marco 18185a557a feat(store_mapping): 加美团原料列(poi_id_str + 分享链/反查URL/deeplink)
美团接入店内搜索 deeplink 链路, 表加 4 列存美团侧店铺身份/原料:
- meituan_poi_id_str: 分享链 302 反查出的 poi_id_str(索引)
- meituan_share_url / meituan_resolved_url / meituan_deeplink: 与 taobao_* 平行

poi_id_str 不进 id_meituan: 调研实证它每次分享重新加密、非稳定主键(同店两条分享链
两个值, 见 docs §八), 单列当"可复跳的一次性票据"存; id_meituan 留给将来 CPS API
拿到的稳定数字 poi_id。4 列均纳入 upsert 填空合并集。

迁移 store_mapping_meituan_cols(down=store_mapping_table); 已 upgrade, 单 head,
模型零漂移, 合并不变式 26列=22合并+4排除 仍成立。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 22:25:20 +08:00
marco 4844e49161 feat(store_mapping): 跨平台店铺映射表 + pricebot 内部上报端点
新增「平台店铺表」资产层: 淘宝比价拿到 shopId 后, pricebot server→server 把跨平台
店铺身份(各平台 id/名 + 地理 + 来源)落库, 作为未来"我见过这家店→跳过重搜/匹配"的源头。
与 price_observation(价格事实)平行、独立。

- models/store_mapping.py: store_mapping 表 22 列 —— 跨平台身份(id/name_taobao/meituan/jd)
  + 地理(city/geohash/lng/lat/taobao_address) + 溯源(source_platform/trace_id/device/user)
  + 淘宝原料(share_url/resolved_url/deeplink) + attrs(JSONB) + created_at。
- schemas/store_mapping.py + repositories/store_mapping.py: append-only, trace_id 幂等
  (pricebot 重试/replay 不重复写; 并发 IntegrityError 兜底返已存在行), 跨方言安全。
- api/internal/store.py: POST /internal/store-mapping(复用 price.py 共享密钥 X-Internal-Secret 校验)。
- 注册 model(__init__) + router(main.py); 迁移 store_mapping_table 接现 head coin_txn_task_ref_uq。

验证: alembic 单 head + 零模型/迁移漂移; TestClient 全链(无密钥401/有密钥inserted=1/幂等inserted=0/错密钥401)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 20:34:53 +08:00