feat: modules, products, services, services kits
This commit is contained in:
@ -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
|
||||
|
||||
@ -3,6 +3,8 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
|
||||
class BaseRepository:
|
||||
session: AsyncSession
|
||||
|
||||
def __init__(self, session: AsyncSession):
|
||||
self.session = session
|
||||
|
||||
|
||||
18
repositories/built_in_module.py
Normal file
18
repositories/built_in_module.py
Normal 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()
|
||||
@ -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]):
|
||||
|
||||
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user