feat: deal product services
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from sqlalchemy import select, update
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
from models import Service, ServiceCategory
|
||||
from models import Service, ServiceCategory, ServicePriceRange
|
||||
from services.base import BaseService
|
||||
from schemas.service import ServiceGetAllResponse, ServiceSchema, ServiceGetAllCategoriesResponse, \
|
||||
ServiceCategorySchema, ServiceCreateRequest, ServiceCreateResponse, ServiceCreateCategoryRequest, \
|
||||
@@ -27,8 +27,18 @@ class ServiceService(BaseService):
|
||||
service_dict['category_id'] = raw_service.category.id
|
||||
del service_dict['id']
|
||||
del service_dict['category']
|
||||
del service_dict['price_ranges']
|
||||
service = Service(**service_dict)
|
||||
self.session.add(service)
|
||||
await self.session.flush()
|
||||
price_ranges = request.service.price_ranges
|
||||
for price_range in price_ranges:
|
||||
price_range_dict = price_range.model_dump()
|
||||
price_range_dict['service_id'] = service.id
|
||||
del price_range_dict['id']
|
||||
price_range_obj = ServicePriceRange(**price_range_dict)
|
||||
self.session.add(price_range_obj)
|
||||
|
||||
await self.session.commit()
|
||||
return ServiceCreateResponse(ok=True, message="Услуга успешно создана")
|
||||
except Exception as e:
|
||||
@@ -37,21 +47,41 @@ class ServiceService(BaseService):
|
||||
async def update(self, request: ServiceUpdateRequest) -> ServiceUpdateResponse:
|
||||
try:
|
||||
raw_service = request.data
|
||||
service = await (self.session
|
||||
.scalars(select(Service)
|
||||
.filter(Service.id == raw_service.id)))
|
||||
service = await (self.session.get(Service, raw_service.id))
|
||||
if not service:
|
||||
return ServiceUpdateResponse(ok=False, message="Услуга не найдена")
|
||||
|
||||
service_dict = raw_service.dict()
|
||||
service_dict['category_id'] = raw_service.category.id
|
||||
del service_dict['category']
|
||||
del service_dict['price_ranges']
|
||||
await self.session.execute(
|
||||
update(Service)
|
||||
.where(Service.id == raw_service.id)
|
||||
.values(**service_dict)
|
||||
)
|
||||
|
||||
# checking if old price ranges are still in the request
|
||||
request_price_range_ids = [price_range.id for price_range in raw_service.price_ranges if price_range.id]
|
||||
price_ranges_to_delete = []
|
||||
for price_range in service.price_ranges:
|
||||
if price_range.id not in request_price_range_ids:
|
||||
price_ranges_to_delete.append(price_range)
|
||||
for price_range in price_ranges_to_delete:
|
||||
await self.session.delete(price_range)
|
||||
await self.session.flush()
|
||||
for price_range in raw_service.price_ranges:
|
||||
price_range_dict = price_range.dict()
|
||||
price_range_dict['service_id'] = raw_service.id
|
||||
if price_range.id:
|
||||
await self.session.execute(
|
||||
update(ServicePriceRange)
|
||||
.where(ServicePriceRange.id == price_range.id)
|
||||
.values(**price_range_dict)
|
||||
)
|
||||
else:
|
||||
del price_range_dict['id']
|
||||
price_range_obj = ServicePriceRange(**price_range_dict)
|
||||
self.session.add(price_range_obj)
|
||||
await self.session.commit()
|
||||
return ServiceUpdateResponse(ok=True, message="Услуга успешно обновлена")
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user