db399a40fa
- ops_stat: 真实值 offset→保底(max);初始基数过只增不减护栏 - ops_marquee: 脱敏名手机尾号+中文昵称混合;金额长尾;时间随机抖动;真实+种子不足兜底补满;真实记录查询 ~30s 缓存 - comparison_record: 复合索引 (status, created_at) + 迁移(PG CONCURRENTLY);修复 alembic 多 head(merge 改挂 onboarding_completion) - 轮播种子批量删除/启用接口 + ids 上限;docs 同步 - 附带并行会话 WIP:admin users / wallet Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #42 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
"""admin 首页轮播种子 schemas。金额单位:分(前端展示 ÷100 取元)。
|
|
|
|
种子 = 生成规则:masked_user 可空(空→feed 随机合成名)、金额是 [min_cents, max_cents] 区间。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class OpsMarqueeSeedOut(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 OpsMarqueeSeedCreate(BaseModel):
|
|
masked_user: str | None = None # 空 / 不传 → feed 随机合成脱敏名
|
|
min_cents: int
|
|
max_cents: int
|
|
enabled: bool = True
|
|
sort_order: int = 0
|
|
|
|
|
|
class OpsMarqueeSeedUpdate(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 OpsMarqueeSeedBulkCreate(BaseModel):
|
|
"""批量生成 count 条自动合成名种子(冷启动铺量)。"""
|
|
count: int
|
|
min_cents: int
|
|
max_cents: int
|
|
enabled: bool = True
|
|
|
|
|
|
class OpsMarqueeSeedBatchDelete(BaseModel):
|
|
"""批量删除选中的种子。"""
|
|
ids: list[int] = Field(..., max_length=500) # 上限防超大列表(审计行/IN 子句过大)
|
|
|
|
|
|
class OpsMarqueeSeedBatchEnable(BaseModel):
|
|
"""批量启用 / 停用选中的种子。"""
|
|
ids: list[int] = Field(..., max_length=500)
|
|
enabled: bool
|
|
|
|
|
|
class OpsSavingsFeedPreviewItem(BaseModel):
|
|
masked_user: str
|
|
saved_amount_cents: int
|
|
time: str
|
|
|
|
|
|
class OpsSavingsFeedPreviewOut(BaseModel):
|
|
"""运营预览:实际混播出来的 feed(真实记录会插队,与客户端一致)。"""
|
|
items: list[OpsSavingsFeedPreviewItem]
|