from typing import TYPE_CHECKING, Optional from sqlalchemy import ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship, backref from models.base import BaseModel from models.mixins import SoftDeleteMixin, CreatedAtMixin, IdMixin if TYPE_CHECKING: from models import Status, Board, DealStatusHistory from modules.clients.models import Client class Deal(BaseModel, IdMixin, SoftDeleteMixin, CreatedAtMixin): __tablename__ = "deals" name: Mapped[str] = mapped_column() lexorank: Mapped[str] = mapped_column() status_id: Mapped[int] = mapped_column( ForeignKey("statuses.id"), comment="Текущий статус", ) status: Mapped["Status"] = relationship() board_id: Mapped[Optional[int]] = mapped_column( ForeignKey("boards.id"), server_default="1" ) board: Mapped[Optional["Board"]] = relationship(back_populates="deals") status_history: Mapped[list["DealStatusHistory"]] = relationship( back_populates="deal", cascade="all, delete-orphan", lazy="noload", ) # module client client_id: Mapped[Optional[int]] = mapped_column( ForeignKey("clients.id", ondelete="CASCADE"), ) client: Mapped["Client"] = relationship( backref=backref("deals", cascade="all, delete-orphan"), lazy="immediate" )