feat: modules, products, services, services kits

This commit is contained in:
2025-09-16 10:54:10 +04:00
parent be8052848c
commit 276626d6f7
55 changed files with 1791 additions and 34 deletions

View File

@ -2,3 +2,4 @@ from .board import BoardRepository as BoardRepository
from .deal import DealRepository as DealRepository
from .project import ProjectRepository as ProjectRepository
from .status import StatusRepository as StatusRepository
from .built_in_module import BuiltInModuleRepository as BuiltInModuleRepository

View File

@ -3,6 +3,8 @@ from sqlalchemy.ext.asyncio import AsyncSession
class BaseRepository:
session: AsyncSession
def __init__(self, session: AsyncSession):
self.session = session

View File

@ -0,0 +1,18 @@
from models import Board, BuiltInModule
from repositories.mixins import *
class BuiltInModuleRepository(
BaseRepository,
RepGetAllMixin[BuiltInModule],
):
entity_class = BuiltInModule
def _process_get_all_stmt_with_args(self, stmt: Select, *args) -> Select:
project_id = args[0]
return stmt.where(Board.project_id == project_id).order_by(Board.lexorank)
async def get_by_ids(self, ids: list[int]) -> list[BuiltInModule]:
stmt = select(BuiltInModule).where(BuiltInModule.id.in_(ids))
built_in_modules = await self.session.scalars(stmt)
return built_in_modules.all()

View File

@ -65,7 +65,7 @@ class RepUpdateMixin(Generic[EntityType, UpdateSchemaType], RepBaseMixin[EntityT
return model
async def update(self, entity: EntityType, data: UpdateSchemaType) -> EntityType:
pass
return await self._apply_update_data_to_model(entity, data, True)
class RepGetByIdMixin(Generic[EntityType], RepBaseMixin[EntityType]):

View File

@ -1,6 +1,7 @@
from sqlalchemy.orm import selectinload
from models.project import Project
from repositories.built_in_module import BuiltInModuleRepository
from repositories.mixins import *
from schemas.project import CreateProjectSchema, UpdateProjectSchema
@ -17,4 +18,10 @@ class ProjectRepository(
return stmt.options(selectinload(Project.boards))
async def update(self, project: Project, data: UpdateProjectSchema) -> Project:
if data.built_in_modules is not None:
built_in_modules = data.built_in_modules
data.built_in_modules = await BuiltInModuleRepository(self.session).get_by_ids(
[module.id for module in built_in_modules]
)
return await self._apply_update_data_to_model(project, data, True)