From 22b8428035410c43f67d81b19fc8a5aa274e352f Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Sun, 21 Sep 2025 09:48:55 +0400 Subject: [PATCH] feat: a few tabs for module --- models/built_in_module.py | 25 +++++++++++++++++++++++-- schemas/module.py | 10 +++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/models/built_in_module.py b/models/built_in_module.py index e4b7d18..6b02221 100644 --- a/models/built_in_module.py +++ b/models/built_in_module.py @@ -1,4 +1,5 @@ -from typing import TYPE_CHECKING, Optional +import enum +from typing import TYPE_CHECKING from sqlalchemy import Table, Column, ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -31,7 +32,6 @@ class BuiltInModule(BaseModel): key: Mapped[str] = mapped_column(unique=True) label: Mapped[str] = mapped_column() description: Mapped[str] = mapped_column() - icon_name: Mapped[Optional[str]] = mapped_column(unique=True) is_deleted: Mapped[bool] = mapped_column(default=False) depends_on: Mapped[list["BuiltInModule"]] = relationship( @@ -56,3 +56,24 @@ class BuiltInModule(BaseModel): back_populates="built_in_modules", lazy="noload", ) + + tabs: Mapped[list["BuiltInModuleTab"]] = relationship( + lazy="immediate", backref="module", cascade="all, delete-orphan" + ) + + +class DeviceType(enum.StrEnum): + MOBILE = "mobile" + DESKTOP = "desktop" + BOTH = "both" + + +class BuiltInModuleTab(BaseModel): + __tablename__ = "built_in_module_tab" + + id: Mapped[int] = mapped_column(primary_key=True) + key: Mapped[str] = mapped_column(unique=True) + label: Mapped[str] = mapped_column() + icon_name: Mapped[str] = mapped_column() + module_id: Mapped[int] = mapped_column(ForeignKey("built_in_modules.id")) + device: Mapped[DeviceType] = mapped_column(default=DeviceType.BOTH) diff --git a/schemas/module.py b/schemas/module.py index 3b75029..f616bc6 100644 --- a/schemas/module.py +++ b/schemas/module.py @@ -3,13 +3,21 @@ from schemas.base import BaseSchema # region Entity +class BuiltInModuleTabSchema(BaseSchema): + id: int + key: str + label: str + icon_name: str + device: str + + class BuiltInModuleSchema(BaseSchema): id: int key: str label: str - icon_name: str description: str depends_on: list["BuiltInModuleSchema"] + tabs: list[BuiltInModuleTabSchema] # endregion