59fe715245
Reviewed-on: #83 Co-authored-by: zhuzihao <zhuzihao@wonderable.ai> Co-committed-by: zhuzihao <zhuzihao@wonderable.ai>
75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
"""首页平台级展示数据 schemas(客户端首页门面数字)。"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class PlatformStatsOut(BaseModel):
|
|
"""首页三统计。total_saved 为分,客户端 ÷100 显示「元」。"""
|
|
|
|
help_users: int # 帮助用户(人)
|
|
total_compares: int # 完成比价(次)
|
|
total_saved_cents: int # 累计节省(分)
|
|
|
|
|
|
class SavingsFeedItem(BaseModel):
|
|
"""首页轮播一条。time 为北京时间 HH:MM:SS。"""
|
|
|
|
masked_user: str # 脱敏用户名,手机尾号(138****5678)或中文昵称(省钱**)混合风格
|
|
saved_amount_cents: int # 节省(分),客户端 ÷100 显示「x.xx 元」
|
|
time: str
|
|
|
|
|
|
class SavingsFeedOut(BaseModel):
|
|
items: list[SavingsFeedItem]
|
|
|
|
|
|
class AppFlagsOut(BaseModel):
|
|
"""客户端拉取的运营 feature flag(不鉴权,登录前也能拉)。客户端缓存后按需读。"""
|
|
|
|
comparing_ad_enabled: bool # 比价/领券期是否展示信息流广告(远程 kill-switch)
|
|
|
|
|
|
class AdConfigPublicOut(BaseModel):
|
|
"""下发给客户端的穿山甲广告配置(不鉴权,客户端缓存后用)。
|
|
|
|
⚠️ 不含 reward_mkey(GroMore 验签密钥,机密,只后端验签用,绝不下发)。
|
|
"""
|
|
|
|
app_id: str # 穿山甲应用ID(改了客户端需冷启才生效,SDK init 一次性读)
|
|
reward_code_id: str # 福利页激励视频位
|
|
compare_draw_code_id: str # 比价 Draw 代码位
|
|
coupon_draw_code_id: str # 领券 Draw 代码位(比价/领券共用同一位,靠 feed_scene 区分收益)
|
|
reward_enabled: bool # 福利激励视频开关
|
|
compare_ad_enabled: bool # 比价广告开关
|
|
coupon_ad_enabled: bool # 领券广告开关
|
|
withdrawal_ad_enabled: bool # 提现激励视频开关(关=客户端直接放行提现)
|
|
|
|
|
|
class AppVersionOut(BaseModel):
|
|
"""最新 App 版本信息(OTA 检查更新,不鉴权)。
|
|
|
|
客户端用 latest_version_code(整数,单调递增)与本机 versionCode 比较,**不要**用 version_name 字符串比。
|
|
latest_version_code=0 表示后台尚未配置任何版本 → 客户端一律视为"已是最新"。
|
|
"""
|
|
|
|
latest_version_code: int = 0 # 最新版 versionCode;0=未配置(无更新)
|
|
latest_version_name: str = "" # 展示用,如 "0.1.4"
|
|
apk_url: str = "" # 下载链接(发车产出的永久版本化链接)
|
|
update_note: str = "" # 更新说明,弹窗展示
|
|
min_supported_version_code: int = 0 # 本机低于此版本=强制更新;0=不强更(全可选)
|
|
apk_size_bytes: int = 0 # 包大小(字节),展示"约 xMB"
|
|
apk_sha256: str = "" # APK 完整性校验(客户端下载后比对,防损坏/劫持)
|
|
|
|
|
|
class AppVersionWriteIn(BaseModel):
|
|
"""内部写入最新版本(发布流程/应急,X-Internal-Secret 校验)。整组原子覆盖。"""
|
|
|
|
latest_version_code: int = Field(gt=0)
|
|
latest_version_name: str = Field(min_length=1)
|
|
apk_url: str = Field(min_length=1)
|
|
update_note: str = ""
|
|
min_supported_version_code: int = 0
|
|
apk_size_bytes: int = 0
|
|
apk_sha256: str = ""
|