from typing import TYPE_CHECKING from sqlalchemy import ForeignKey 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 Status, Board, CardStatusHistory class Deal(BaseModel, IdMixin, SoftDeleteMixin, CreatedAtMixin): __tablename__ = "deals" name: Mapped[str] = mapped_column(nullable=False) lexorank: Mapped[str] = mapped_column(nullable=False) status_id: Mapped[int] = mapped_column( ForeignKey("statuses.id"), nullable=False, comment="Текущий статус", ) status: Mapped["Status"] = relationship(lazy="noload") board_id: Mapped[int] = mapped_column( ForeignKey("boards.id"), nullable=True, server_default="1" ) board: Mapped["Board"] = relationship(back_populates="deals") status_history: Mapped[list["CardStatusHistory"]] = relationship( back_populates="deal", cascade="all, delete-orphan", lazy="noload", )