Files
Fulfillment-Backend/models/status.py

64 lines
2.3 KiB
Python

from datetime import datetime
from typing import TYPE_CHECKING
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from models import BaseModel
if TYPE_CHECKING:
from models import Board, Card, User
class CardStatus(BaseModel):
__tablename__ = 'card_statuses'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False)
ordinal_number: Mapped[int] = mapped_column(nullable=False)
is_finishing: Mapped[bool] = mapped_column(default=False, nullable=False)
is_deleted: Mapped[bool] = mapped_column(default=False, nullable=False)
board_id: Mapped[int] = mapped_column(ForeignKey('boards.id'), nullable=False)
board: Mapped['Board'] = relationship('Board', back_populates='statuses')
class CardStatusHistory(BaseModel):
__tablename__ = 'cards_status_history'
id: Mapped[int] = mapped_column(primary_key=True)
card_id: Mapped[int] = mapped_column(ForeignKey('cards.id'), nullable=False, comment='ID карточки')
card: Mapped['Card'] = relationship('Card', back_populates='status_history')
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'), nullable=False)
user: Mapped['User'] = relationship('User')
changed_at: Mapped[datetime] = mapped_column(nullable=False, comment='Дата и время когда произошла смена статуса')
from_status_id: Mapped[int] = mapped_column(
ForeignKey('card_statuses.id'),
nullable=False,
comment='Предыдущий статус',
)
from_status: Mapped[CardStatus] = relationship(
'CardStatus',
foreign_keys=[from_status_id],
lazy='joined',
)
to_status_id: Mapped[int] = mapped_column(
ForeignKey('card_statuses.id'),
nullable=False,
comment='Новый статус',
)
to_status: Mapped[CardStatus] = relationship(
'CardStatus',
foreign_keys=[to_status_id],
lazy='joined',
)
next_status_deadline: Mapped[datetime] = mapped_column(
comment='Дедлайн до которого сделку нужно перевести на следующий этап',
)
comment: Mapped[str] = mapped_column(nullable=False, comment='Комментарий', server_default='')