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, ) from repositories.mixins import * class ServicesKitRepository( RepCrudMixin[ServicesKit, CreateServicesKitSchema, UpdateServicesKitSchema], ): entity_class = ServicesKit entity_not_found_msg = "Набор услуг не найден" 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_kit: ServicesKit, data: UpdateServicesKitSchema ) -> ServicesKit: 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)