Files
video/server/app/schemas/admin.py
T
2026-10-17 19:04:05 +08:00

153 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""管理后台请求模型(对应《03-接口文档》第 11 章)"""
from pydantic import BaseModel, Field
class AdminLoginReq(BaseModel):
"""管理员登录(11.1)"""
username: str = Field(min_length=1, max_length=50)
password: str = Field(min_length=1, max_length=100)
class VideoReviewReq(BaseModel):
"""审核视频(11.4)"""
action: str = Field(pattern="^(approve|reject)$")
reason: str | None = Field(None, max_length=200)
class ReasonReq(BaseModel):
"""通用敏感操作原因(下架视频 / 删除评论等)"""
reason: str = Field(min_length=1, max_length=200)
class UserStatusReq(BaseModel):
"""封禁/解封用户(11.8)"""
status: int = Field(ge=1, le=2) # 1正常 2封禁
reason: str = Field(min_length=1, max_length=200)
class PointsAdjustReq(BaseModel):
"""积分调整(11.9)"""
user_id: int = Field(ge=1)
change_amount: int = Field(ge=-1000000, le=1000000) # 非 0 由服务端校验
reason: str = Field(min_length=1, max_length=200)
class UserPasswordResetReq(BaseModel):
"""后台重置用户密码"""
new_password: str = Field(min_length=6, max_length=100)
reason: str = Field(min_length=1, max_length=200)
class ResettleReq(BaseModel):
"""人工补单(11.12)"""
reason: str = Field(min_length=1, max_length=200)
third_trade_no: str | None = Field(None, max_length=64)
class RefundReq(BaseModel):
"""退款登记(11.12-2【敏感】):reason 必填"""
reason: str = Field(min_length=1, max_length=200)
class PackageCreateReq(BaseModel):
"""新增充值套餐(11.14)"""
amount_yuan: int = Field(ge=1, le=100000)
bonus_points: int = Field(0, ge=0)
sort: int = 0
points: int | None = Field(None, ge=0) # 不传则按汇率计算
class PackageUpdateReq(BaseModel):
"""修改充值套餐(11.15)"""
amount_yuan: int | None = Field(None, ge=1, le=100000)
bonus_points: int | None = Field(None, ge=0)
sort: int | None = None
status: int | None = Field(None, ge=0, le=1)
class GiftReq(BaseModel):
"""赠送会员/积分(11.17)"""
user_ids: list[int] = Field(min_length=1, max_length=100)
gift_type: str = Field(pattern="^(membership|points)$")
plan_code: str | None = Field(None, max_length=20)
points: int | None = Field(None, gt=0, le=1000000)
reason: str = Field(min_length=1, max_length=200)
class WithdrawReviewReq(BaseModel):
"""提现审核(11.20)"""
action: str = Field(pattern="^(approve|reject)$")
reason: str | None = Field(None, max_length=200)
class ReferralReviewReq(BaseModel):
"""推荐风控处理(11.22)"""
action: str = Field(pattern="^(release|invalid)$")
reason: str = Field(min_length=1, max_length=200)
class ConfigUpdateReq(BaseModel):
"""修改平台配置(11.24)"""
value: str = Field(max_length=500)
class ReportReviewReq(BaseModel):
"""举报处理(11.29)"""
action: str = Field(pattern="^(offline_video|delete_comment|reject)$")
reason: str = Field(min_length=1, max_length=200)
class SensitiveWordAddReq(BaseModel):
"""添加敏感词(11.31)"""
word: str = Field(min_length=1, max_length=50)
class AdminPasswordChangeReq(BaseModel):
"""管理员修改密码(11.35)"""
old_password: str = Field(min_length=1, max_length=100)
new_password: str = Field(min_length=6, max_length=100)
class AdminVideoCreateReq(BaseModel):
"""管理后台新增视频(11.36)
两种模式二选一:
- upload_token + cover_upload_token:先通过 /admin/videos/upload 获取上传凭证,
前端直传到 server/uploads 后把 token 传回(视频自动转码)
- video_url + cover_url:直接填 m3u8 地址(适合 CDN 外站 / 已经转码好的资源)
"""
title: str = Field(min_length=1, max_length=100)
description: str = Field(max_length=500, default="")
category_id: int = Field(ge=1)
tag_names: list[str] | None = Field(None)
# 模式 A:先上传再发布(token 方式)
upload_token: str | None = None
cover_upload_token: str | None = None # 可选
# 模式 B:直接填 URL(m3u8 外站)
video_url: str | None = Field(None, max_length=500)
cover_url: str | None = Field(None, max_length=500)
duration: int | None = Field(None, ge=1, le=36000) # 秒,可选
# 发布状态:默认待审核(1),也可直接发布(2)
status: int = Field(1, ge=1, le=2)