""" 主播分成协议模型 """ from datetime import date from typing import Optional, TYPE_CHECKING from sqlalchemy import ( Column, Date, String, Text, Float, ) from sqlalchemy.orm import Mapped, mapped_column from app.models.base import BaseModel if TYPE_CHECKING: from .streamer import StreamerInfo, McnAgency class RevenueSharingContract(BaseModel): """ 主播分成协议表(收入分成协议) """ __tablename__ = "contract" contract_id: Mapped[str] = mapped_column( String(50), unique=True, nullable=False, comment="协议ID" ) contract_no: Mapped[str] = mapped_column( String(100), nullable=False, comment="协议编号" ) contract_type: Mapped[str] = mapped_column( String(50), nullable=False, comment="协议类型:tip_sharing-打赏分成,ecommerce_cooperation-电商合作,brand_ambassador-品牌代言", ) streamer_id: Mapped[str] = mapped_column( String(50), nullable=False, comment="主播ID" ) streamer_name: Mapped[str] = mapped_column( String(100), nullable=False, comment="主播姓名" ) streamer_entity_type: Mapped[str] = mapped_column( String(20), nullable=False, comment="主播主体类型" ) platform_party: Mapped[str] = mapped_column( String(200), nullable=False, comment="平台方名称" ) platform_credit_code: Mapped[str] = mapped_column( String(18), nullable=False, comment="平台方统一社会信用代码" ) revenue_type: Mapped[str] = mapped_column( String(50), nullable=False, comment="收入类型:tip-打赏,product_sales-商品销售,advertising-广告", ) platform_ratio: Mapped[float] = mapped_column( nullable=False, comment="平台分成比例" ) streamer_ratio: Mapped[float] = mapped_column( nullable=False, comment="主播分成比例" ) settlement_cycle: Mapped[str] = mapped_column( String(20), nullable=False, comment="结算周期:weekly-周结,monthly-月结,quarterly-季结", ) contract_start_date: Mapped[date] = mapped_column( Date, nullable=False, comment="协议开始日期" ) contract_end_date: Mapped[date] = mapped_column( Date, nullable=False, comment="协议结束日期" ) contract_status: Mapped[str] = mapped_column( String(20), default="active", comment="协议状态:active-生效,suspended-暂停,terminated-终止,expired-过期", ) remark: Mapped[Optional[str]] = mapped_column( Text, nullable=True, comment="备注" ) # 向后兼容的别名 Contract = RevenueSharingContract