from datetime import datetime from typing import TYPE_CHECKING from sqlalchemy.orm import mapped_column, Mapped, relationship from models.base import BaseModel if TYPE_CHECKING: from board import Board from attribute import Attribute from module import Module from card_tag import CardTag class Project(BaseModel): __tablename__ = 'projects' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(nullable=False) created_at: Mapped[datetime] = mapped_column(nullable=False) is_deleted: Mapped[bool] = mapped_column(default=False) boards: Mapped[list['Board']] = relationship( 'Board', back_populates='project', lazy='noload', ) attributes: Mapped[list['Attribute']] = relationship( 'Attribute', secondary='project_attribute', back_populates='projects', lazy='selectin', ) modules: Mapped[list['Module']] = relationship( 'Module', secondary='project_module', back_populates='projects', lazy='selectin', order_by='asc(Module.id)', ) tags: Mapped[list['CardTag']] = relationship( 'CardTag', back_populates='project', primaryjoin="and_(Project.id == CardTag.project_id, CardTag.is_deleted == False)", order_by='asc(CardTag.id)', lazy='selectin', )