74 lines
1.5 KiB
Python
74 lines
1.5 KiB
Python
|
|
"""
|
||
|
|
主播相关Schema
|
||
|
|
"""
|
||
|
|
from pydantic import BaseModel, Field
|
||
|
|
from typing import Optional
|
||
|
|
from datetime import datetime
|
||
|
|
from decimal import Decimal
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerProfileBase(BaseModel):
|
||
|
|
display_name: Optional[str] = None
|
||
|
|
bio: Optional[str] = None
|
||
|
|
commission_rate: Optional[Decimal] = Field(default=5.00, ge=0, le=100, description="主播抽成比例(%)")
|
||
|
|
max_active_chests: Optional[int] = Field(default=10, ge=1, le=100, description="最大活跃宝箱数")
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerProfileCreate(StreamerProfileBase):
|
||
|
|
user_id: int
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerProfileUpdate(StreamerProfileBase):
|
||
|
|
status: Optional[str] = None
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerProfileResponse(StreamerProfileBase):
|
||
|
|
id: int
|
||
|
|
user_id: int
|
||
|
|
avatar_url: Optional[str] = None
|
||
|
|
total_chests: int
|
||
|
|
total_winnings: Decimal
|
||
|
|
status: str
|
||
|
|
created_at: datetime
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
from_attributes = True
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerStatistics(BaseModel):
|
||
|
|
total_chests: int
|
||
|
|
active_chests: int
|
||
|
|
total_winnings: int
|
||
|
|
total_commission: int
|
||
|
|
average_chest_value: int
|
||
|
|
success_rate: float
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerChestList(BaseModel):
|
||
|
|
"""主播宝箱列表项"""
|
||
|
|
id: int
|
||
|
|
title: str
|
||
|
|
status: str
|
||
|
|
pool_a: int
|
||
|
|
pool_b: int
|
||
|
|
total_bets: int
|
||
|
|
created_at: datetime
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
from_attributes = True
|
||
|
|
|
||
|
|
|
||
|
|
class StreamerBetRecord(BaseModel):
|
||
|
|
"""主播下注记录"""
|
||
|
|
id: int
|
||
|
|
user_id: int
|
||
|
|
chest_id: int
|
||
|
|
option: str
|
||
|
|
amount: int
|
||
|
|
payout: int
|
||
|
|
status: str
|
||
|
|
created_at: datetime
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
from_attributes = True
|