feat: work shift pauses

This commit is contained in:
2024-12-04 11:00:00 +04:00
parent 2bd2486653
commit 9a6fc3fdd7
5 changed files with 316 additions and 72 deletions

View File

@@ -2,6 +2,7 @@ from datetime import datetime
from typing import TYPE_CHECKING
from sqlalchemy import ForeignKey
from sqlalchemy.sql import expression
from sqlalchemy.orm import Mapped, mapped_column, relationship
from models.base import BaseModel
@@ -20,6 +21,10 @@ class WorkShift(BaseModel):
finished_at: Mapped[datetime] = mapped_column(
nullable=True,
)
is_paused: Mapped[bool] = mapped_column(
default=False,
server_default=expression.false(),
)
user_id: Mapped[int] = mapped_column(
ForeignKey("users.id"),
@@ -29,3 +34,32 @@ class WorkShift(BaseModel):
back_populates="work_shifts",
lazy="selectin",
)
pauses: Mapped[list["WorkShiftPause"]] = relationship(
"WorkShiftPause",
back_populates="work_shift",
uselist=True,
foreign_keys="[WorkShiftPause.work_shift_id]",
cascade="all, delete",
)
class WorkShiftPause(BaseModel):
__tablename__ = "work_shifts_pauses"
id: Mapped[int] = mapped_column(primary_key=True)
started_at: Mapped[datetime] = mapped_column(
nullable=False,
)
finished_at: Mapped[datetime] = mapped_column(
nullable=True,
)
work_shift_id: Mapped[int] = mapped_column(
ForeignKey("work_shifts.id"),
)
work_shift: Mapped[WorkShift] = relationship(
"WorkShift",
back_populates="pauses",
lazy="selectin",
)