47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
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, IdMixin, CreatedAtMixin
|
|
|
|
if TYPE_CHECKING:
|
|
from models import Board, Deal
|
|
|
|
|
|
class Status(BaseModel, IdMixin, SoftDeleteMixin):
|
|
__tablename__ = "statuses"
|
|
|
|
name: Mapped[str] = mapped_column()
|
|
lexorank: Mapped[str] = mapped_column()
|
|
color: Mapped[str] = mapped_column()
|
|
|
|
board_id: Mapped[int] = mapped_column(ForeignKey("boards.id"))
|
|
board: Mapped["Board"] = relationship(back_populates="statuses")
|
|
|
|
|
|
class DealStatusHistory(BaseModel, IdMixin, CreatedAtMixin):
|
|
__tablename__ = "status_history"
|
|
|
|
deal_id: Mapped[int] = mapped_column(ForeignKey("deals.id"))
|
|
deal: Mapped["Deal"] = relationship(back_populates="status_history")
|
|
|
|
from_status_id: Mapped[int] = mapped_column(
|
|
ForeignKey("statuses.id"),
|
|
comment="Старый статус",
|
|
)
|
|
from_status: Mapped[Status] = relationship(
|
|
foreign_keys=[from_status_id],
|
|
lazy="joined",
|
|
)
|
|
|
|
to_status_id: Mapped[int] = mapped_column(
|
|
ForeignKey("statuses.id"),
|
|
comment="Новый статус",
|
|
)
|
|
to_status: Mapped[Status] = relationship(
|
|
foreign_keys=[to_status_id],
|
|
lazy="joined",
|
|
)
|