""" 分成协议相关Pydantic模型 """ from datetime import date, datetime from typing import Optional, List from pydantic import BaseModel, Field class ContractBase(BaseModel): """分成协议基础模型""" contract_no: Optional[str] = Field(None, description="协议编号") contract_type: str = Field(..., description="协议类型") streamer_id: Optional[str] = Field(None, description="主播ID") streamer_name: str = Field(..., description="主播姓名") streamer_entity_type: Optional[str] = Field(None, description="主播主体类型") platform_party: str = Field(..., description="平台方名称") platform_credit_code: Optional[str] = Field(None, description="平台方统一社会信用代码") revenue_type: str = Field(..., description="收入类型") platform_ratio: float = Field(..., description="平台分成比例") streamer_ratio: float = Field(..., description="主播分成比例") settlement_cycle: str = Field(..., description="结算周期") contract_start_date: date = Field(..., description="协议开始日期") contract_end_date: date = Field(..., description="协议结束日期") contract_status: Optional[str] = Field(None, description="协议状态") remark: Optional[str] = Field(None, description="备注") class ContractCreate(ContractBase): """创建分成协议""" pass class ContractUpdate(BaseModel): """更新分成协议""" contract_no: Optional[str] = None contract_type: Optional[str] = None streamer_id: Optional[str] = None streamer_name: Optional[str] = None streamer_entity_type: Optional[str] = None platform_party: Optional[str] = None platform_credit_code: Optional[str] = None revenue_type: Optional[str] = None platform_ratio: Optional[float] = None streamer_ratio: Optional[float] = None settlement_cycle: Optional[str] = None contract_start_date: Optional[date] = None contract_end_date: Optional[date] = None contract_status: Optional[str] = None remark: Optional[str] = None class ContractResponse(ContractBase): """分成协议响应模型""" id: int contract_id: str created_at: Optional[str] = None class Config: from_attributes = True class ContractListResponse(BaseModel): """分成协议列表响应模型""" records: List[ContractResponse] total: int page: int size: int