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