From 3e51d26c651e562c1deba90095295a2527985662 Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Sat, 2 Aug 2025 18:13:23 +0400 Subject: [PATCH] feat: project, board, status, deal models --- models/__init__.py | 9 +++++++++ models/board.py | 32 ++++++++++++++++++++++++++++++++ models/deal.py | 24 ++++++++++++++++++++++++ models/project.py | 24 ++++++++++++++++++++++++ models/status.py | 24 ++++++++++++++++++++++++ 5 files changed, 113 insertions(+) create mode 100644 models/board.py create mode 100644 models/deal.py create mode 100644 models/project.py create mode 100644 models/status.py diff --git a/models/__init__.py b/models/__init__.py index e69de29..db354e0 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -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() diff --git a/models/board.py b/models/board.py new file mode 100644 index 0000000..d8bac1b --- /dev/null +++ b/models/board.py @@ -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", + ) diff --git a/models/deal.py b/models/deal.py new file mode 100644 index 0000000..46bb0b3 --- /dev/null +++ b/models/deal.py @@ -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") diff --git a/models/project.py b/models/project.py new file mode 100644 index 0000000..c2b86de --- /dev/null +++ b/models/project.py @@ -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", + ) diff --git a/models/status.py b/models/status.py new file mode 100644 index 0000000..a1f5e88 --- /dev/null +++ b/models/status.py @@ -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", + )