feat: deal status history and default created_at in db

This commit is contained in:
2025-08-26 18:12:28 +04:00
parent b776ad6758
commit 4c7a997be6
7 changed files with 54 additions and 18 deletions

View File

@ -4,6 +4,6 @@ from .base import BaseModel as BaseModel
from .board import Board as Board
from .deal import Deal as Deal
from .project import Project as Project
from .status import Status as Status
from .status import Status as Status, CardStatusHistory as CardStatusHistory
configure_mappers()

View File

@ -7,7 +7,7 @@ from models.base import BaseModel
from models.mixins import SoftDeleteMixin, CreatedAtMixin, IdMixin
if TYPE_CHECKING:
from models import Status, Board
from models import Status, Board, CardStatusHistory
class Deal(BaseModel, IdMixin, SoftDeleteMixin, CreatedAtMixin):
@ -27,3 +27,9 @@ class Deal(BaseModel, IdMixin, SoftDeleteMixin, CreatedAtMixin):
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",
)

View File

@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone
from sqlalchemy import DateTime
from sqlalchemy.orm import Mapped, mapped_column
@ -17,5 +17,7 @@ class SoftDeleteMixin:
class CreatedAtMixin:
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False
DateTime(timezone=True),
default=lambda: datetime.now(timezone.utc),
nullable=False,
)

View File

@ -4,10 +4,10 @@ from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from models.base import BaseModel
from models.mixins import SoftDeleteMixin, IdMixin
from models.mixins import SoftDeleteMixin, IdMixin, CreatedAtMixin
if TYPE_CHECKING:
from models import Board
from models import Board, Deal
class Status(BaseModel, IdMixin, SoftDeleteMixin):
@ -18,3 +18,30 @@ class Status(BaseModel, IdMixin, SoftDeleteMixin):
board_id: Mapped[int] = mapped_column(ForeignKey("boards.id"), nullable=False)
board: Mapped["Board"] = relationship(back_populates="statuses")
class CardStatusHistory(BaseModel, IdMixin, CreatedAtMixin):
__tablename__ = "status_history"
deal_id: Mapped[int] = mapped_column(ForeignKey("deals.id"), nullable=False)
deal: Mapped["Deal"] = relationship(back_populates="status_history")
from_status_id: Mapped[int] = mapped_column(
ForeignKey("statuses.id"),
nullable=False,
comment="Старый статус",
)
from_status: Mapped[Status] = relationship(
foreign_keys=[from_status_id],
lazy="joined",
)
to_status_id: Mapped[int] = mapped_column(
ForeignKey("statuses.id"),
nullable=False,
comment="Новый статус",
)
to_status: Mapped[Status] = relationship(
foreign_keys=[to_status_id],
lazy="joined",
)