feat: project, board, status, deal models

This commit is contained in:
2025-08-02 18:13:23 +04:00
parent 27fb24a44c
commit 3e51d26c65
5 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,9 @@
from sqlalchemy.orm import configure_mappers
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
configure_mappers()

32
models/board.py Normal file
View File

@ -0,0 +1,32 @@
from datetime import datetime
from typing import TYPE_CHECKING
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from models.base import BaseModel
if TYPE_CHECKING:
from models import Project, Status
class Board(BaseModel):
__tablename__ = "boards"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False)
lexorank: Mapped[str] = mapped_column(nullable=False)
created_at: Mapped[datetime] = mapped_column(nullable=False)
is_deleted: Mapped[bool] = mapped_column(default=False)
project_id: Mapped[int] = mapped_column(ForeignKey("projects.id"), nullable=False)
project: Mapped["Project"] = relationship(
"Project",
back_populates="boards",
)
statuses: Mapped[list["Status"]] = relationship(
"Status",
back_populates="board",
)

24
models/deal.py Normal file
View File

@ -0,0 +1,24 @@
from typing import TYPE_CHECKING
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from models.base import BaseModel
if TYPE_CHECKING:
from models import Status
class Deal(BaseModel):
__tablename__ = "deals"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False)
lexorank: Mapped[str] = mapped_column(nullable=False)
status_id: Mapped[int] = mapped_column(
ForeignKey("statuses.id"),
nullable=False,
comment="Текущий статус",
)
status: Mapped["Status"] = relationship(lazy="selectin")

24
models/project.py Normal file
View File

@ -0,0 +1,24 @@
from datetime import datetime
from typing import TYPE_CHECKING
from sqlalchemy.orm import Mapped, mapped_column, relationship
from models.base import BaseModel
if TYPE_CHECKING:
from models import Board
class Project(BaseModel):
__tablename__ = "projects"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False)
created_at: Mapped[datetime] = mapped_column(nullable=False)
is_deleted: Mapped[bool] = mapped_column(default=False)
boards: Mapped[list["Board"]] = relationship(
"Board",
back_populates="project",
lazy="noload",
)

24
models/status.py Normal file
View File

@ -0,0 +1,24 @@
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
class Status(BaseModel):
__tablename__ = "statuses"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False)
lexorank: Mapped[str] = mapped_column(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",
)