c9578f5ba2
轮播 feed(marquee_seed,全新): - 新增 marquee_seed 表 + admin CRUD/批量生成/预览;真实比价记录(success 且 0<省额≤300元、按 user 去重)优先,种子兜底混播 - 种子为「生成规则」:用户名可空(空则按脱敏格式随机合成、避开同屏撞名),金额改 [min,max] 区间随机,feed 公平随机抽取(不看 sort_order) - 新增 GET /api/v1/platform/savings-feed(无鉴权);展示时间统一刷新为相对当前的最近时刻 三统计配置(platform_stat_display)增强: - 自增长新增「绝对增量」方式(random_kind=add,每周期 +[step_min,step_max]) - 真实值模式加基数偏移(real_offset,展示=真实+偏移) - 只增不减护栏(allow_decrease 默认关,real/manual 不回退防门面缩水) - 累计节省 real 口径只计 0<单条≤300元防虚高;倍率上限 5.0→1.5;PATCH 支持 apply_now 立即更新 迁移:marquee_seed_table / marquee_seed_range / platform_stat_growth_offset(均可逆,已验证) 文档:API/DB 对应文档同步更新 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""admin 首页轮播种子 schemas。金额单位:分(前端展示 ÷100 取元)。
|
|
|
|
种子 = 生成规则:masked_user 可空(空→feed 随机合成名)、金额是 [min_cents, max_cents] 区间。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class MarqueeSeedOut(BaseModel):
|
|
id: int
|
|
masked_user: str | None = None
|
|
min_cents: int
|
|
max_cents: int
|
|
enabled: bool
|
|
sort_order: int
|
|
created_at: str | None = None
|
|
|
|
|
|
class MarqueeSeedCreate(BaseModel):
|
|
masked_user: str | None = None # 空 / 不传 → feed 随机合成脱敏名
|
|
min_cents: int
|
|
max_cents: int
|
|
enabled: bool = True
|
|
sort_order: int = 0
|
|
|
|
|
|
class MarqueeSeedUpdate(BaseModel):
|
|
# masked_user:不传=不改;传空串=清空(改回随机合成);传值=固定该名
|
|
masked_user: str | None = None
|
|
min_cents: int | None = None
|
|
max_cents: int | None = None
|
|
enabled: bool | None = None
|
|
sort_order: int | None = None
|
|
|
|
|
|
class MarqueeSeedBulkCreate(BaseModel):
|
|
"""批量生成 count 条自动合成名种子(冷启动铺量)。"""
|
|
count: int
|
|
min_cents: int
|
|
max_cents: int
|
|
enabled: bool = True
|
|
|
|
|
|
class SavingsFeedPreviewItem(BaseModel):
|
|
masked_user: str
|
|
saved_amount_cents: int
|
|
time: str
|
|
|
|
|
|
class SavingsFeedPreviewOut(BaseModel):
|
|
"""运营预览:实际混播出来的 feed(真实记录会插队,与客户端一致)。"""
|
|
items: list[SavingsFeedPreviewItem]
|