from enum import Enum from sqlalchemy import Boolean, Integer, String from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import BaseModel class CompanyPlan(str, Enum): """企业套餐类型""" FREE = "免费版" BASIC = "基础版" PROFESSIONAL = "专业版" ENTERPRISE = "企业版" class CompanyStatus(str, Enum): """企业状态""" ACTIVE = "正常" SUSPENDED = "暂停" EXPIRED = "已过期" DELETED = "已删除" class Company(BaseModel): """ 企业模型 - 多租户隔离的核心实体 Attributes: name: 企业名称 plan: 套餐类型 data_retention_months: 数据保留月数 status: 企业状态 max_users: 最大用户数 is_trial: 是否试用 """ __tablename__ = "companies" name: Mapped[str] = mapped_column(String(200), nullable=False, index=True) plan: Mapped[str] = mapped_column( String(50), nullable=False, default=CompanyPlan.FREE.value ) data_retention_months: Mapped[int] = mapped_column(Integer, nullable=False, default=12) status: Mapped[str] = mapped_column( String(20), nullable=False, default=CompanyStatus.ACTIVE.value, index=True, ) max_users: Mapped[int] = mapped_column(Integer, nullable=False, default=5) is_trial: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True) # 关系 users = relationship("User", back_populates="company") field_mappings = relationship("FieldMapping", back_populates="company") rules = relationship("CompanyRule", back_populates="company") tasks = relationship("ReconciliationTask", back_populates="company") def __repr__(self) -> str: return f""