ebacf01742
Co-authored-by: exinglang <exinglang@qq.com> Reviewed-on: #200 Co-authored-by: zuochenyong <zuochenyong@wonderable.ai> Co-committed-by: zuochenyong <zuochenyong@wonderable.ai>
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
"""后台引导视频配置协议。"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
from app.repositories.guide_video import (
|
|
MAX_PLAYS_LIMIT,
|
|
MIN_PLAYS,
|
|
MIN_REWARD_COIN,
|
|
REWARD_COIN_LIMIT,
|
|
)
|
|
|
|
|
|
class GuideVideoConfigOut(BaseModel):
|
|
scene: str
|
|
enabled: bool
|
|
video_url: str | None = None
|
|
max_plays: int
|
|
reward_coin: int
|
|
duration_ms: int | None = None
|
|
circle_count: int = 10
|
|
circle_duration_ms: float | None = None
|
|
reward_per_circle: int
|
|
video_codec: str | None = None
|
|
audio_codec: str | None = None
|
|
analysis_status: str
|
|
analysis_error: str | None = None
|
|
config_version: int
|
|
updated_at: str | None = None
|
|
|
|
|
|
class GuideVideoConfigUpdate(BaseModel):
|
|
enabled: bool | None = None
|
|
max_plays: int | None = Field(default=None, ge=MIN_PLAYS, le=MAX_PLAYS_LIMIT)
|
|
reward_coin: int | None = Field(
|
|
default=None, ge=MIN_REWARD_COIN, le=REWARD_COIN_LIMIT
|
|
)
|
|
|
|
@field_validator("reward_coin")
|
|
@classmethod
|
|
def reward_must_be_multiple_of_ten(cls, value: int | None) -> int | None:
|
|
if value is not None and value % 10:
|
|
raise ValueError("金币总价必须是 10 的倍数")
|
|
return value
|