""" 租户模型 """ from typing import TYPE_CHECKING from sqlalchemy import String, Boolean from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import Base, TimestampMixin if TYPE_CHECKING: from app.models.ai_config import AIConfig from app.models.review import ReviewTask, ManualTask from app.models.rule import ForbiddenWord, WhitelistItem, Competitor from app.models.risk_exception import RiskException class Tenant(Base, TimestampMixin): """租户表""" __tablename__ = "tenants" id: Mapped[str] = mapped_column(String(64), primary_key=True) name: Mapped[str] = mapped_column(String(255), nullable=False) is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False) # 关联关系 ai_config: Mapped["AIConfig"] = relationship( "AIConfig", back_populates="tenant", uselist=False, lazy="selectin", ) review_tasks: Mapped[list["ReviewTask"]] = relationship( "ReviewTask", back_populates="tenant", lazy="selectin", ) manual_tasks: Mapped[list["ManualTask"]] = relationship( "ManualTask", back_populates="tenant", lazy="selectin", ) forbidden_words: Mapped[list["ForbiddenWord"]] = relationship( "ForbiddenWord", back_populates="tenant", lazy="selectin", ) whitelist_items: Mapped[list["WhitelistItem"]] = relationship( "WhitelistItem", back_populates="tenant", lazy="selectin", ) competitors: Mapped[list["Competitor"]] = relationship( "Competitor", back_populates="tenant", lazy="selectin", ) risk_exceptions: Mapped[list["RiskException"]] = relationship( "RiskException", back_populates="tenant", lazy="selectin", ) def __repr__(self) -> str: return f""