Commit Graph

8 Commits

Author SHA1 Message Date
chenshuobo db9742f132 美团 feed 三 tab 降级兜底:加 status(ok/empty/degraded),空库/上游失败均返 200 不再 5xx
- FeedResponse/CouponListResponse 加 status 字段(默认 ok,向后兼容)
- rec 改为不被 MT 凭证开关拦截(纯库查询);distance 的 from_raw 逐条容错
- /coupons 美团失败由 502 软化为 200+degraded,避免前端弹错
- 同步 API 文档(feed/coupons/top-sales/README)
2026-06-10 17:21:41 +08:00
chenshuobo ccddd009af 智能推荐改走离线库筛佣金率≥3%并隐藏距离;距离最近改实时搜索按用户真实位置排序
- 距离最近(/feed tab=distance):实时搜索召回(外卖搜"外卖" + 到店搜"美食"bizLine=1),都 sortField=6 离我最近,searchId 续页分页,用 App 上报的真实经纬度算距离;
- 智能推荐(/feed tab=rec):从离线库 meituan_coupon 筛佣金率≥3% 分页返回(实测≥3% 的券几乎全是外卖、到店团购普遍<3%);并隐藏其距离展示(库里距离是相对城市默认点的、对用户无意义,置空后前端店名自动顶到最左);
- feed 接口补 db 依赖与 _call/aliased/nullslast 导入。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:54:03 +08:00
chenshuobo 3d2b85d319 修首页 feed 翻页卡顿 / 翻不动
1. /top-sales(销量最高):之前每翻一页都全表拉取(~1400 条)+ 全量 from_raw 解析,翻页慢 → 滑动卡顿。
   改为 SQL 侧 DISTINCT ON(dedup_key) 去重 + 排序 + 分页,每页只取并解析当前页 ~20 条
   (实测 14ms/页 vs 之前每页全量);并加 id 作稳定 tiebreaker,修同销量同佣金并列项的跨页重复。
2. /feed(智能推荐/距离最近):池子很小(~60/117 条),之前 rec 逐页实时打美团(每页 2 调用 ~1s)→
   翻页反复触发 + 列表重组卡顿。改为两 tab 都拉齐全部轮次后【一次性返回 has_next=False】,
   前端加载一次即不再翻页,滚动顺畅。默认(老客户端不传 tab)仍逐页,不受影响。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 15:06:58 +08:00
chenshuobo 60157507ad 新增 /top-sales 接口:销量最高从离线库 meituan_coupon 取(不再实时打美团)
「销量最高」改为从本地离线库按销量降序返回,替代实时打美团同城热销(外卖只有~20条还波动):
- POST /api/v1/meituan/top-sales:WHERE sale_volume_num IS NOT NULL,按 sale_volume_num 降序、
  同销量再按 commission_percent 降序;用 dedup_key 跨源去重;用 raw(整条原始返回)重建 CouponCard,
  字段与实时接口完全一致,前端无需改渲染。
- schemas 加 TopSalesRequest(page / page_size / 可选 platform)

离线库由定时 ETL(scripts/pull_meituan_coupons.py)灌入(见本分支前序提交)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 23:18:06 +08:00
chenshuobo 834a2c434a 首页 feed 智能推荐/距离最近 改由后端筛选排序(把客户端 filter/sort 下沉到后端)
mentor 指出筛选放前端不合理:前端只能筛"已加载的几十条",不是完整池子。改为 /feed 加 tab 参数,
后端按 tab 处理后返回,前端只渲染:
- tab=rec(智能推荐):榜单混合 feed 过滤掉佣金率 < 3%(分页)
- tab=distance(距离最近):拉齐全部榜单轮次,在【完整池】上全局按距离由近及远排,一次性返回(has_next=False)
- 留空/其它:返回原混合 feed 不筛(老客户端兼容;新 app 会显式传 tab)
(销量最高走 /coupons 同城热销,已是后端,不在本次)

实测北京:distance 拉到 118 条且全局升序;rec 第1页佣金率全部 ≥3%。

改动:app/schemas/meituan.py(FeedRequest.tab)、app/api/v1/meituan.py(feed 按 tab 筛选/排序 + _commission_pct)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 22:56:53 +08:00
marco abd8eabf9b feat(meituan): 未配置 MT_CPS_APP_KEY 时接口降级返空,不再 502
之前未配美团 CPS 凭证时,/coupons 和 /referral-link 调用会抛 MeituanCpsError
被翻成 502,前端首页一进就拉 /feed → 看到错误(虽然 /feed 因 _fetch_topic
吞异常已经返空)。新开发机没填美团 key 时体验差。

本次让美团 3 个接口都在入口处早返空响应:
- Settings 新增 mt_cps_configured property(同 wxpay_configured 套路)
- /coupons / /feed / /referral-link 未配置时分别返空 list / 空 link
- 客户端首页 feed 看到空列表,其他业务(登录/领券/广告/提现)完全不受影响

副作用:/feed 返空现在同时表示"配置缺失"和"美团真无券"两种状态,排查时
看 settings.mt_cps_configured 区分。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:54:51 +08:00
marco 8303a4fac2 refactor: 后端分层调整(集成层独立、crud 改名) + 本地启动脚本
- core 拆分: 极光/美团/短信三个外部集成从 core/ 迁出到新建的 integrations/,
  core/ 仅保留 config/security/logging 等基础设施
- crud/ 改名 repositories/; auth.py 中模块别名 crud_user -> user_repo
- 同步更新 app/api/v1/{auth,meituan}.py 的 import 路径
- 新增 run.sh: 本地开发启动脚本(校验 .env、alembic upgrade 建表、uvicorn 监听 0.0.0.0:8770)
- .gitignore 忽略 *.log, 避免 run.sh 运行日志入库

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 11:04:51 +08:00
lowmaster-chen cc9d9f03f7 feat: 接入美团联盟 CPS 优惠券推荐模块
- 新增 app/core/meituan.py: 美团联盟 API 客户端 (S-Ca 签名, query_coupon, get_referral_link)
- 新增 app/api/v1/meituan.py: /api/v1/meituan/coupons 和 /feed 路由, 支持按经纬度推荐
- 新增 app/schemas/meituan.py: 请求/响应 Pydantic Schema
- app/main.py: 注册 meituan_router
- app/core/config.py: 新增 MT_CPS_* 配置项, .env 路径改为绝对路径避免 CWD 问题
- .env.example: 补充美团联盟 CPS 配置模板

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:29:31 +08:00