deep-risk/backend/app/schemas/contract.py
2025-12-14 20:08:27 +08:00

68 lines
2.4 KiB
Python

"""
分成协议相关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