From 8cf589c54eda532ec5b54d4c88c133ecf762f618 Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Thu, 25 Sep 2025 09:43:03 +0400 Subject: [PATCH] fix: services kit create and update fix --- .../fulfillment_base/repositories/service.py | 5 ++++ .../repositories/services_kit.py | 24 +++++++++++++++++-- .../fulfillment_base/schemas/services_kit.py | 4 ++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/modules/fulfillment_base/repositories/service.py b/modules/fulfillment_base/repositories/service.py index 8cee055..b64dd95 100644 --- a/modules/fulfillment_base/repositories/service.py +++ b/modules/fulfillment_base/repositories/service.py @@ -19,3 +19,8 @@ class ServiceRepository( async def update(self, service: Service, data: UpdateServiceSchema) -> Service: return await self._apply_update_data_to_model(service, data, True) + + async def get_by_ids(self, ids: list[int]) -> list[Service]: + stmt = select(Service).where(Service.id.in_(ids)) + result = await self.session.execute(stmt) + return result.scalars().all() diff --git a/modules/fulfillment_base/repositories/services_kit.py b/modules/fulfillment_base/repositories/services_kit.py index d2deca3..5eaf6a3 100644 --- a/modules/fulfillment_base/repositories/services_kit.py +++ b/modules/fulfillment_base/repositories/services_kit.py @@ -1,6 +1,7 @@ from sqlalchemy.orm import selectinload from modules.fulfillment_base.models.service import ServicesKit +from modules.fulfillment_base.repositories import ServiceRepository from modules.fulfillment_base.schemas.services_kit import ( CreateServicesKitSchema, UpdateServicesKitSchema, @@ -17,7 +18,26 @@ class ServicesKitRepository( def _process_get_by_id_stmt(self, stmt: Select) -> Select: return stmt.options(selectinload(ServicesKit.services)) + async def create(self, data: CreateServicesKitSchema) -> int: + if data.services is not None: + service_ids: list[int] = [service.id for service in data.services] + data.services = await ServiceRepository(self.session).get_by_ids( + service_ids + ) + kit = ServicesKit( + name=data.name, service_type=data.service_type, services=data.services + ) + self.session.add(kit) + await self.session.commit() + await self.session.refresh(kit) + return kit.id + async def update( - self, service: ServicesKit, data: UpdateServicesKitSchema + self, service_kit: ServicesKit, data: UpdateServicesKitSchema ) -> ServicesKit: - return await self._apply_update_data_to_model(service, data, True) + if data.services is not None: + service_ids: list[int] = [service.id for service in data.services] + data.services = await ServiceRepository(self.session).get_by_ids( + service_ids + ) + return await self._apply_update_data_to_model(service_kit, data, True) diff --git a/modules/fulfillment_base/schemas/services_kit.py b/modules/fulfillment_base/schemas/services_kit.py index 70db766..c1112e7 100644 --- a/modules/fulfillment_base/schemas/services_kit.py +++ b/modules/fulfillment_base/schemas/services_kit.py @@ -16,11 +16,11 @@ class ServicesKitSchema(BaseServicesKitSchema): class CreateServicesKitSchema(BaseServicesKitSchema): - services_ids: list[int] + services: list[ServiceSchema] class UpdateServicesKitSchema(BaseServicesKitSchema): - services_ids: list[int] + services: list[ServiceSchema] # endregion