44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
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)
|