陈世睿
25c9f6aaaf
Merge branch 'feat/h5-sgbridge' of https://gitea.shaguabijia.com/WonderableAI/shaguabijia-app-server into feat/h5-sgbridge
2026-07-02 20:28:20 +08:00
guke
0db5a798cd
fix(dl): 落地页底图+logo 纳入 git → 修生产 /media 404 毛坯 ( #97 ) ( #106 )
...
Co-authored-by: guke <guke@autohome.com.cn >
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-authored-by: wuqi <wuqi@wonderable.ai >
Co-authored-by: chenshuobo <chenshuobo@wonderable.ai >
Co-authored-by: liujiahui <liujiahui@wonderable.ai >
Reviewed-on: #106
2026-07-02 17:44:56 +08:00
陈世睿
ea0c563680
福利模块 H5:赚钱中心壳(资产卡/签到/任务行+welfareTask桥接契约)+ 收益明细 + 活动规则,素材取自原型
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-02 15:02:49 +08:00
陈世睿
3057955ea4
修复 H5 顶栏莫名下移22px:清除 head 里字体注入残留的 \x01 控制字符(5页),并统一去掉 min-height:100vh
...
:
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-02 15:02:25 +08:00
陈世睿
43f6f16a61
Merge branch 'main' of https://gitea.shaguabijia.com/WonderableAI/shaguabijia-app-server into feat/h5-sgbridge
2026-07-01 10:26:07 +08:00
zhuzihao
357b2312af
chore(deploy): 穿山甲收益拉取 systemd 定时器(每天10:30)+ 运维手册 ( #100 )
...
为 #92 的 scripts/sync_pangle_revenue.py 补 systemd 部署单元,让穿山甲 GroMore T+1 后台收益每天自动拉取入库,免人工敲命令。纯部署/文档文件,不改运行时代码。
- service:oneshot,跑 `--days 3` 回补近 3 天(幂等 upsert,扛偶发漏跑与穿山甲历史订正);10min 硬超时;加固块对齐主服务。
- timer:每天 10:30 触发(穿山甲约 10:00 出数留余量),Persistent 宕机后补跑。
- md:运维手册——上线前置(.env 填 PANGLE_REPORT_* 凭证、子账号需授权否则接口 118)、部署/健康检查/参数/注意事项(join key 用 ad_unit_id 非 code_id 等)。
- 风格对齐现有 deploy/daily-exchange.* 与 deploy/meituan-etl.*。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #100
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
0.2.7
2026-06-30 22:59:41 +08:00
zhuzihao
78d970f420
feat: 领券数据看板 — coupon_session 流水表 + admin 聚合接口 ( #99 )
...
- 新表 coupon_session(一次领券一行,trace_id 唯一):POST /api/v1/coupon/session
两段 upsert(发起 started / 收尾 completed·failed·abandoned),记全程耗时、各平台耗时、
机型/ROM、app_env、trace_url、origin_package(发起来源)。
- admin GET /admin/api/coupon-data:发起/完成数 + 平均耗时 + P5/P50/P95/P99(Python 算分位,
SQLite 无 percentile)+ 按天/小时趋势 + 明细分页 + join 用户手机号/昵称,app_env 默认 prod;
另加 GET /admin/api/coupon-data/user-records 供「点手机号看该用户全部领券」抽屉。
- 迁移拆 3 个:建表 coupon_session_table + trace_url 加列 + origin_package 加列
(建表迁移已被某环境应用后改它不重跑,故新列单独加列迁移)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #99
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-30 22:59:36 +08:00
chenshuobo
a3a14b484a
feat: 接入京东联盟订单到数据大盘 ( #90 )
...
改了什么:新增京东联盟订单查询客户端、cps_order 京东字段迁移、CPS 对账接口 platform=all/jd、数据大盘京东订单与佣金聚合。
为什么改:数据大盘需要展示京东 CPS 真实订单佣金,不再保持占位。
验证方式:python -m pytest tests\\test_admin_read.py::test_dashboard_overview tests\\test_cps_admin.py::test_jd_reconcile_updates_dashboard -q;本地真实拉取 2026-06-27 京东订单 3 行,页面显示京东有效 1 单/佣金 ¥0.13。
---------
Co-authored-by: lowmaster-chen <1119780489@qq.com >
Reviewed-on: #90
Co-authored-by: chenshuobo <chenshuobo@wonderable.ai >
Co-committed-by: chenshuobo <chenshuobo@wonderable.ai >
2026-06-30 21:56:58 +08:00
liujiahui
208112ff24
fix(dl): 落地页底图+logo 纳入 git → 修生产 /media 404 毛坯 ( #97 )
...
## 背景
用户反馈浏览器落地页仍是「毛坯」(裸黄底、缺优惠券卡/价格卡/logo)。
## 真因(实测线上)
`https://app-api.shaguabijia.com/media/dl.html ` 的 **HTML 早已是完善版且已部署**,但它引用的两张静态图被 `.gitignore` 的 `data/media/*` 规则挡在库外、从未随部署进生产 `/media`:
| 资源 | 线上 | 本地/git |
|---|---|---|
| `/media/coupon-page-bg.png`(底图:优惠券卡+跨平台比价价格卡) | **404**(22B `{"detail":"Not Found"}`) | 之前被 gitignore |
| `/media/sb-brand.png`(logo) | **404** | 之前被 gitignore |
| `/media/shaguabijia.apk`(对照) | 200 ✓ | — |
→ 两图加载失败 → 页面回退裸黄底 = 毛坯。
## 改动
照 `dl.html` / `taobao_landing.jpg` 既有白名单写法,把这两张图加进 `.gitignore` 例外并入库。
- `.gitignore`:`!data/media/coupon-page-bg.png`、`!data/media/sb-brand.png`
- 入库两图,md5 与原型一致(coupon-page-bg `f2adf28a` / sb-brand `e5b6e004`)
**无代码/HTML 改动**(dl.html 本就对齐原型,见上一 commit `6d4cbc8`)。
## 部署后生效
合并并部署本分支后,生产 `/media/` 即含这两图,落地页恢复完整。对应 6-29 UI 对齐 #10。
---------
Co-authored-by: no_gen_mu <liujianhishen@gmail.com >
Reviewed-on: #97
Co-authored-by: liujiahui <liujiahui@wonderable.ai >
Co-committed-by: liujiahui <liujiahui@wonderable.ai >
2026-06-30 20:48:31 +08:00
陈世睿
667cbdf8ad
Merge remote-tracking branch 'origin/feat/h5-sgbridge' into feat/h5-sgbridge
2026-06-30 20:05:47 +08:00
陈世睿
7ac3ca8fd6
新增设置页与相关协议 H5(头像底部 sheet+裁剪、昵称/退出/注销弹窗、页面不滚动、手势条避让)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 20:02:49 +08:00
陈世睿
b81ba70235
新增意见反馈、反馈历史 H5 页(去框 + 接 /api/v1/feedback,真机对齐)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 20:02:49 +08:00
陈世睿
85523a99d2
全 H5 页中文字体改用阿里普惠体真字模,移除 text-shadow 伪粗体兜底
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 20:02:48 +08:00
陈世睿
a076bc9a2c
Merge branch 'main' of https://gitea.shaguabijia.com/WonderableAI/shaguabijia-app-server into feat/h5-sgbridge
2026-06-30 15:07:46 +08:00
zhuzihao
32f300b5a2
调现金接口支持目标账户(金币现金 / 邀请奖励金)+ overview 带邀请余额 ( #95 )
...
- GrantCashRequest 加 account(coin_cash / invite_cash,默认 coin_cash 兼容旧调用)
- 调现金接口按 account 分支:邀请账户走 grant_invite_cash,余额读取/扣负保护/审计
detail 都按对应账户走;两本账物理隔离不可串
- 用户 360 overview 返回 invite_cash_balance_cents(admin 调现金弹窗展示邀请余额)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #95
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-30 12:02:56 +08:00
guke
8e3b282c79
feat(h5): 首页 H5 壳从定稿原型抽取(#home 满屏,静态 mock,零桥) ( #96 )
...
首页webview改造合并
---------
Co-authored-by: guke <guke@autohome.com.cn >
Reviewed-on: #96
2026-06-30 11:57:47 +08:00
陈世睿
4d730169bf
真机验收修复:我的页去框沉浸式 + 三页字体加粗 + 卡片细节
...
我的页(h5/mine)整页去框满屏 + 顶部状态栏沉浸式(云朵铺到状态栏下/隐藏假状态栏/内容 safe-area/头像对齐原型);三页统一注入 faux-bold(安卓 WebView 中文回退字体不合成粗体兜底);上报最低价选记录态列表间距去框对齐(top 198→154);上报记录卡平台改主名+主logo(美团/京东/淘宝)+ 菜品名 2 行截断
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-30 09:52:07 +08:00
zhuzihao
81639ed388
fix(ad-revenue): 报表收益按满额钳顶 + 新增 app_env 过滤 ( #93 )
...
广告收益报表两处隐患修复(admin/repositories/ad_revenue.py + routers/ad_revenue.py):
- 收益钳顶:单次展示收益原用裸 parse_ecpm_yuan、未钳上限;发奖侧 calculate_ad_reward_coin
已钳 AD_ECPM_MAX_FEN(¥500 CPM)。异常/伪造天价 eCPM 会让报表预估收益虚高任意大。改为
min(parse_ecpm_yuan, AD_ECPM_MAX_FEN/100)/1000,与发奖同口径。
- app_env 过滤:报表聚合原无 app_env 过滤,测试应用假 eCPM(如 ¥678 CPM)会进正式收益合计/平均。
新增 app_env 参数(repository + router Query),显式传 prod/test 才过滤;默认仍全部(不擅自改成
默认排除 test:本地 dev 库多为 test 会空、且属产品口径)。穿山甲后台收益列暂未联动此过滤。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #93
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
0.2.6
2026-06-29 23:11:41 +08:00
zhuzihao
5efe624340
admin 反馈/低价审核接口增强 + 反馈采集端环境(版本/机型) ( #94 )
...
- 反馈:新增 GET /admin/api/feedbacks/summary(待审核/已采纳/未采纳/合计计数);
列表联表带出完整手机号 + 昵称(供 admin 点手机号查该用户全部反馈)
- 低价审核:列表加 sort_by/sort_order(提交时间排序);联表带出手机号/昵称,
并按 comparison_record_id 关联比价记录带出 trace_id/trace_url + 机型/ROM/Android/app 版本
- feedback 表新增 app_version/device_model/rom_name/android_version 四列 + alembic 迁移;
/api/v1/feedback 提交接口接收并落库,供 admin 反馈页展示「提交版本号」「机型OS版本」
(字段可空,旧端不传不影响提交)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #94
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-29 23:11:30 +08:00
陈世睿
cdfe66dcee
接入上报记录列表 H5(第三个 session 的孤儿页,补提交整合)
...
h5/reports/index.html(审核中/已通过/未通过三态+计数,真接 /api/v1/report/records)+ logos;android REPORT_RECORDS 路由稍后接 H5
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 17:13:21 +08:00
陈世睿
8d08986c00
合并:上报最低价 H5
2026-06-29 17:12:53 +08:00
陈世睿
be77ffa721
我的页迁远程 H5
...
h5/mine/index.html改用SGBridge.getAuthState/navigate(同源相对API);拷入页面静态资源h5/mine/assets/
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 17:12:08 +08:00
陈世睿
0bed761c00
上报最低价流程对齐原型/原生 + 接桥
...
toast改感谢您的反馈/D校验文案/提交失败解析后端detail/模拟键盘补小数点后2位上限/取消改closePage真返回/上报记录入口接SGBridge.navigate(reportRecords)/头部未读红点默认隐藏
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 17:12:00 +08:00
guke
109aebaa16
chore(scripts): records 页比价记录 mock 数据脚本(真机验收用,幂等)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 14:33:35 +08:00
guke
84ae950ea7
feat(h5): records 页迁入 server 改用 SGBridge(同源相对 API,保留 multipart 上传)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 13:14:18 +08:00
guke
122766c911
feat(h5): SGBridge 新增 closePage(返回上一页)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 13:05:33 +08:00
guke
cee4f3e0a7
fix(h5): no-cache 按响应 content-type 判定,覆盖目录式 URL(/h5/x/)
...
html=True 时 /h5/x/ 经 Starlette 回落 index.html,但 path 仍为 x/ 不带 .html,旧判定漏设 no-cache。改用响应 content-type=text/html 判定,并加目录式 URL 回归测试。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 13:03:36 +08:00
guke
4fb8f6447c
feat(h5): FastAPI StaticFiles 同源托管 /h5(.html no-cache)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 12:51:42 +08:00
guke
46c650ecb8
docs(h5): 新增 H5/WebView 改造方案(方案1 SGBridge,服务端托管)
...
由 app-server 同源托管业务 H5(StaticFiles 挂 /h5);records/reports 从安卓迁入改用 SGBridge/SGApi;bridge.js 补 closePage;后端业务接口零改动;含远程开关、缓存热更、M1-M4 里程碑。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 12:14:15 +08:00
zhuzihao
b622f76a02
feat(ad-revenue): 接入穿山甲 GroMore 数据 API 拉取后台收益(预估+收益API) ( #92 )
...
- 新增穿山甲 GroMore「聚合数据报告 API」对接,按天 T+1 拉取后台 revenue(预估)与
api_revenue(收益API,更接近结算),在广告收益报表大盘 + 按天趋势级展示,与客户端自报
eCPM 折算的预估并列对照;逐条广告事件行不动(仍是客户端预估)。
- 链路:integrations/pangle_report.py(MD5 签名,与官方文档两个测试向量逐字节一致)→
scripts/sync_pangle_revenue.py(拉昨天/--days 回补)→ 新表 ad_pangle_daily_revenue
(repositories/ad_pangle_revenue.py:upsert + 按日聚合)→ admin/repositories/ad_revenue.py
汇总,新增 total_pangle_revenue_yuan / total_pangle_api_revenue_yuan / daily[].pangle_*。
- 穿山甲无用户/类型/场景维度:仅全量视图(未按 user/ad_type/feed_scene 过滤)给值,否则置
None;join key 用 ad_unit_id(=客户端配的 104xxx),非 code_id。
- 新增配置 PANGLE_REPORT_USER_ID/ROLE_ID/SECURITY_KEY(≠发奖 m-key)+ site_id→应用映射;
含单测(签名向量+分页解析);已真连穿山甲验证。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #92
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-29 09:54:13 +08:00
wuqi
c0b67fd879
feat(launch_confirm): 新增启动确认样本列表内部接口(供 pricebot distill 回读) ( #91 )
...
补齐「启动确认窗自进化闭环」里 app-server 这一侧的读路径:pricebot 的 launch_confirm
LLM 兜底成功样本会 server→server 落到 app-server 的 launch_confirm_sample 表;本提交
新增「样本列表查询」内部接口, 供 pricebot 的 scripts/distill_launch_confirm.py 回读这些
样本、按「宿主包 × 文案变体」聚合沉淀出候选规则。
- app/api/internal/launch_confirm.py: 新增样本列表内部接口(server→server, 不走用户 JWT)
- app/repositories/launch_confirm_sample.py: 样本列表查询
- app/schemas/launch_confirm_sample.py: 列表响应 schema
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Reviewed-on: #91
Co-authored-by: wuqi <wuqi@wonderable.ai >
Co-committed-by: wuqi <wuqi@wonderable.ai >
2026-06-28 21:40:42 +08:00
xiebing
2ed62c789f
feat(h5): 我的页改 H5(mine 页 + shared bridge/api) ( #89 )
...
- h5/mine/index.html: 个人中心「我的页」H5 实现
- h5/shared/bridge.js, api.js: H5↔客户端桥与 API 封装(mine 依赖)
Reviewed-on: #89
Co-authored-by: xiebing <xiebing@wonderable.ai >
Co-committed-by: xiebing <xiebing@wonderable.ai >
0.2.5
2026-06-28 14:16:32 +08:00
chenshuobo
1548406f29
美团 feed 改用离线库 + 三 tab 降级兜底(替换 main 的实时版 feed) ( #88 )
...
Co-authored-by: lowmaster-chen <1119780489@qq.com >
Co-authored-by: chenshuobo <1119780489@qq.com >
Reviewed-on: #88
Co-authored-by: chenshuobo <chenshuobo@wonderable.ai >
Co-committed-by: chenshuobo <chenshuobo@wonderable.ai >
2026-06-28 10:38:31 +08:00
guke
b7b958ed58
perf(pricebot): 透传复用共享 httpx 单例,免每请求重建 SSL 上下文 + 绕过进程代理 ( #87 )
...
coupon/compare 透传原先每请求 async with httpx.AsyncClient(...) 新建:
每次重建 SSL 上下文(加载 certifi CA)实测 ~1s+,而 pricebot 是纯 HTTP
透传根本用不到 TLS;且 trust_env 默认 True 会把 http://localhost:8000
经进程代理(Clash)再绕几秒。
抽 app/core/pricebot_client.py 共享单例:trust_env=False 直连,lifespan
启动预热(SSL 一次性成本付在启动)、关停 aclose;timeout 下放到 .post()
保留 coupon 30s / compare 60s 差异。keep-alive 复用 TCP,每帧降到个位数 ms。
---------
Co-authored-by: guke <guke@autohome.com.cn >
Reviewed-on: #87
Co-authored-by: guke <guke@wonderable.ai >
Co-committed-by: guke <guke@wonderable.ai >
2026-06-28 09:36:31 +08:00
wuqi
f3cd97a190
feat: 信息流广告改"所见即所得"发奖——直接发客户端小球显示金币 ( #86 )
...
Reviewed-on: #86
Co-authored-by: wuqi <wuqi@wonderable.ai >
Co-committed-by: wuqi <wuqi@wonderable.ai >
0.2.4
2026-06-27 23:49:51 +08:00
zhuzihao
b4c27f4d88
fix(ad): eCPM 上报撞会话唯一约束不再抛 500,按全局口径兜底去重 ( #85 )
...
create_ecpm_record 撞 uq_ad_ecpm_record_session(只含 ad_session_id、全局唯一)
时,改用与约束同口径的全局查找 _find_by_session_global(仅按 ad_session_id)兜底,
并去掉末尾的 raise。原逻辑兜底用带 user_id 的 find_by_session:不同 user 上报了
同一 ad_session_id 时二次查找仍为 None → raise → 接口 500,违背该接口
best-effort / fire-and-forget 约定(丢一两条不影响业务,穿山甲后台才是结算权威)。
find_by_session 签名与行为不变,另两个调用方(ad_reward、ad.py)不受影响。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #85
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-27 22:42:58 +08:00
zhuzihao
e38120ad49
feat(ad-revenue): 收益报表分页/场景筛选/倒序,并修复信息流金币审计复算口径+ 大盘改版 ( #84 )
...
收益报表(/admin/api/ad-revenue-report):
- 明细改按时间倒序;新增 offset 真分页(limit 作每页大小、total 为全量),可翻页看当前筛选下全部数据,突破原 1000 条上限。
- 「场景」(feed_scene)下推后端做全局筛选,同时作用于明细/合计/daily·hourly 趋势(原为前端仅过滤明细)。
- 新增全量 hourly 序列,按小时趋势改用它,不再受分页截断影响。
修复信息流金币审计复算口径漂移(ad_audit):
- 发奖侧 grant_feed_reward 早已是「一条广告=1份、LT 按账号累计条数(COUNT)」,但审计仍按 unit_count 逐份累加 + SUM(unit_count) 做 LT 基线,导致单条停留>20s(份数>1)时应发虚高、必然「✗ 不符」。
- 审计改为每条 granted 按 1 份复算、LT 基线用 COUNT,与发奖对齐;金币审计页与收益报表(复用同一复算)一并恢复正确。纯复算口径修正,不改实际发奖、不动钱。
文档同步更新 admin-ad-revenue-report.md。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #84
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-27 22:42:54 +08:00
marco
3d67749101
fix(compare-record): specs 兼容 pricebot 嵌套规格对象
...
pricebot 嵌套规格统一(2026-06-27)后 calibration.specs 可能是规格对象
[{name, qty, sub_specs}] 而非字符串。ComparisonItemIn.specs 加 before-validator
把对象拍平成可读字符串"主项(子1,子2)",兼容新旧输入、保持 list[str] 契约(下游零改动)。
防两坑:① 直接声明 list[str] → 对象 specs 整条 422 被拒、不入库;
② 仅放宽成裸 list → 下游 join 出"[object Object]"乱码。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
0.2.3
2026-06-27 09:26:00 +08:00
marco
f1c2ea662b
fix(migration): merge alembic 3-way 分叉为单 head(修本地 upgrade head 报 Multiple head revisions)
...
#82(invite_cash)/埋点(c2874d2bf705)/device_first_protected_at 三个 PR 并行合 main 留下 3 个 head,
`alembic upgrade head`(单数)报 Multiple head revisions。加一个空 merge 迁移把三支并成单 head,
deploy 的 `upgrade heads`(复数)和本地 `upgrade head` 都干净。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
0.2.2
2026-06-27 03:06:53 +08:00
marco
be15a119a7
fix(migration): 缩短 revision id 至 26 字符(修 alembic_version varchar(32) 截断致 0.2.1 部署失败)
...
invite_cash_account_and_compare_reward(38字符) > alembic_version.version_num varchar(32),
INSERT 时 psycopg StringDataRightTruncation → 部署 alembic 迁移失败。改为 invite_cash_compare_reward(26)。
该迁移是链末端(无后续 down_revision 依赖)、首次部署(任何环境都没应用过、PG DDL 事务失败已回滚无残留), 改 id 安全。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
0.2.1
2026-06-27 02:58:29 +08:00
zhuzihao
59fe715245
feat(analytics): 埋点事件接收接口 + admin 查询接口 + 埋点表 ( #83 )
...
Reviewed-on: #83
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-26 23:56:29 +08:00
zhuzihao
667cda566f
feat(analytics): 埋点事件接收接口 + admin 查询接口 + 埋点表 ( #81 )
...
新手引导埋点的服务端:
- 表 analytics_event(五维硬性列 + props JSON 扩展字段;event/device_id/user_id/session_id/created_at 带索引)
- POST /api/v1/analytics/events:客户端批量上报(不鉴权、body 读可选 user_id、补 client_ip + server_at)
- admin GET /admin/api/event-logs:列表 + 按 事件/设备/用户/会话/时间 筛选(offset 分页,照 list_feedbacks)
- alembic migration 建表(autogenerate 顺带检出的 ad/cps 历史索引漂移已手动剔除)
app 主后端 :8770 与 admin :8771 共用同一 SQLite,admin 同库直接查、无需跨库。
配套客户端五维上报 + admin 日志页(另两仓库 PR)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #81
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-26 23:33:31 +08:00
xiebing
19f5987436
feat(invite): 邀请奖励金账户(与金币隔离) + 比价发奖 + 奖励金提现 ( #82 )
...
Reviewed-on: #82
Co-authored-by: xiebing <xiebing@wonderable.ai >
Co-committed-by: xiebing <xiebing@wonderable.ai >
2026-06-26 21:10:21 +08:00
chenshirui
1d6432d8bb
feat(admin): 设备存活监控接口 + 首次无障碍开启时间(first_protected_at) ( #80 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: 陈世睿 <2839904623@qq.com >
Reviewed-on: #80
Co-authored-by: chenshirui <chenshirui@wonderable.ai >
Co-committed-by: chenshirui <chenshirui@wonderable.ai >
2026-06-26 15:28:16 +08:00
guke
2eb44fe947
feat(cps): 每日明细按天按用户领券下钻接口 + /daily date 改全日期 ( #79 )
...
- 新增 GET /admin/api/cps/groups/{id}/day-users?date=YYYY-MM-DD:
按 openid 聚合当天领券(copy)/点击(visit) + 每人 visit 过的券(券×次数)
---------
Co-authored-by: guke <guke@autohome.com.cn >
Reviewed-on: #79
2026-06-26 15:17:37 +08:00
zhuzihao
ea22a11ef9
fix(ad): 激励视频发奖按环境隔离,堵测试包看广告给生产同 id 用户串号发币 ( #77 )
...
## 问题
激励视频发奖走穿山甲 S2S 回调 /api/v1/ad/pangle-callback,发币时只认回调里的裸数字
user_id(grant_ad_reward 仅校验「本库存在该 id」),无任何环境归属校验。
同一 user_id 在测试库(本地 localhost)与正式库(线上)是两个不同的人;穿山甲 S2S 回调
地址只配一个(指向生产),测试包(dev)看广告的回调也会打到生产 → 生产把奖发给「本库里
同 user_id 的另一个真人」,造成跨库串号:测试看一次广告,正式库同号用户也被发币(线上
广告收益页因此多出一条本不该有的发奖记录)。
## 修复(服务端,按环境隔离)
pangle_callback 解析激励视频 mediaExtra 透传的 srv_env(dev/prod),与本服 settings.APP_ENV
不符则受理但不发币、不写记录(is_verify=true 防穿山甲重试)。不带 srv_env 的旧客户端按本
环境放行(兼容,不误伤存量正式用户)。
- 新增回归测试 test_callback_foreign_env_skipped(srv_env=prod 打到 APP_ENV=dev 的服务 → 不发)
- sim_pangle_callback 增加 --srv-env 便于本地手验
客户端配套(mediaExtra 写入 srv_env)见 app-android 对应 PR。
## 生效前提(三者缺一仍漏)
1. 生产 app-server 部署本代码并重启
2. 生产 .env 为 APP_ENV=prod
3. app 重新构建(旧包不带 srv_env 仍走兼容放行)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #77
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-26 13:17:27 +08:00
zhuzihao
2edebfad83
feat(auth): 短信登录防刷 — 同一设备id同IP 每小时限 5 次 ( #78 )
...
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #78
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
2026-06-26 13:17:07 +08:00
guke
3dca126411
fix(dev): 启动脚本钉定 .venv 解释器 + watchfiles 降噪 ( #75 )
...
微信优惠券增加美团/京东中间页,领券前获取微信头像授权(主功能)
---------
Co-authored-by: guke <guke@autohome.com.cn >
Reviewed-on: #75
Co-authored-by: guke <guke@wonderable.ai >
Co-committed-by: guke <guke@wonderable.ai >
2026-06-25 17:47:30 +08:00
zhuzihao
acdb10b516
feat(ad): 提现看视频广告后端支持(withdrawal_ad 场景 + 开关下发) ( #74 )
...
Co-authored-by: zzhyyyyy <2685922758@qq.com >
Reviewed-on: #74
Co-authored-by: zhuzihao <zhuzihao@wonderable.ai >
Co-committed-by: zhuzihao <zhuzihao@wonderable.ai >
0.1.23
0.2.0
2026-06-24 22:38:06 +08:00
marco
b1849834f7
fix(alembic): merge meituan_coupon_image_meta 与 comparison/ad 双 head
2026-06-24 20:50:21 +08:00