from typing import TYPE_CHECKING from sqlalchemy.orm import Mapped, mapped_column, relationship from models.base import BaseModel from models.mixins import SoftDeleteMixin, CreatedAtMixin, IdMixin if TYPE_CHECKING: from models import Board, BuiltInModule, DealTag class Project(BaseModel, IdMixin, SoftDeleteMixin, CreatedAtMixin): __tablename__ = "projects" name: Mapped[str] = mapped_column() boards: Mapped[list["Board"]] = relationship( back_populates="project", lazy="noload", ) built_in_modules: Mapped[list["BuiltInModule"]] = relationship( secondary="project_built_in_module", back_populates="projects", lazy="selectin", order_by="asc(BuiltInModule.id)", ) tags: Mapped[list["DealTag"]] = relationship( back_populates="project", primaryjoin="and_(Project.id == DealTag.project_id, DealTag.is_deleted == False)", order_by="asc(DealTag.id)", lazy="selectin", )