49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
from modules.fulfillment_base.models import Service
|
|
from modules.fulfillment_base.models.service import ServicePriceRange
|
|
from modules.fulfillment_base.schemas.service import (
|
|
CreateServiceSchema,
|
|
UpdateServiceSchema,
|
|
)
|
|
from repositories.mixins import *
|
|
|
|
|
|
class ServiceRepository(
|
|
BaseRepository,
|
|
RepGetAllMixin[Service],
|
|
RepDeleteMixin[Service],
|
|
RepUpdateMixin[Service, UpdateServiceSchema],
|
|
RepGetByIdMixin[Service],
|
|
):
|
|
entity_class = Service
|
|
entity_not_found_msg = "Услуга не найдена"
|
|
|
|
async def create(self, data: CreateServiceSchema) -> int:
|
|
price_ranges = []
|
|
for range in data.price_ranges:
|
|
price_ranges.append(
|
|
ServicePriceRange(
|
|
from_quantity=range.from_quantity,
|
|
to_quantity=range.to_quantity,
|
|
price=range.price,
|
|
)
|
|
)
|
|
|
|
data_dict = data.model_dump()
|
|
data_dict["price_ranges"] = price_ranges
|
|
data_dict["category_id"] = data.category.id
|
|
del data_dict["category"]
|
|
|
|
service = Service(**data_dict)
|
|
self.session.add(service)
|
|
await self.session.commit()
|
|
await self.session.refresh(service)
|
|
return service.id
|
|
|
|
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()
|