57 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from sqlalchemy import select
 | 
						|
from sqlalchemy.orm import joinedload
 | 
						|
 | 
						|
from models import Service, ServiceCategory
 | 
						|
from services.base import BaseService
 | 
						|
from schemas.service import ServiceGetAllResponse, ServiceSchema, ServiceGetAllCategoriesResponse, \
 | 
						|
    ServiceCategorySchema, ServiceCreateRequest, ServiceCreateResponse, ServiceCreateCategoryRequest, \
 | 
						|
    ServiceCreateCategoryResponse
 | 
						|
 | 
						|
 | 
						|
class ServiceService(BaseService):
 | 
						|
    async def get_all(self) -> ServiceGetAllResponse:
 | 
						|
        query = await (self.session
 | 
						|
                       .scalars(select(Service)
 | 
						|
                                .options(joinedload(Service.category))
 | 
						|
                                .order_by(Service.category_id, Service.id)))
 | 
						|
        services = []
 | 
						|
        for service in query.all():
 | 
						|
            services.append(ServiceSchema.model_validate(service))
 | 
						|
        return ServiceGetAllResponse(services=services)
 | 
						|
 | 
						|
    async def create(self, request: ServiceCreateRequest) -> ServiceCreateResponse:
 | 
						|
        try:
 | 
						|
            raw_service = request.service
 | 
						|
            service_dict = raw_service.model_dump()
 | 
						|
            service_dict['category_id'] = raw_service.category.id
 | 
						|
            del service_dict['id']
 | 
						|
            del service_dict['category']
 | 
						|
            service = Service(**service_dict)
 | 
						|
            self.session.add(service)
 | 
						|
            await self.session.commit()
 | 
						|
            return ServiceCreateResponse(ok=True, message="Услуга успешно создана")
 | 
						|
        except Exception as e:
 | 
						|
            return ServiceCreateResponse(ok=False, message=f"Неудалось создать услугу, ошибка: {e}")
 | 
						|
 | 
						|
    async def create_category(self, request: ServiceCreateCategoryRequest) -> ServiceCreateCategoryResponse:
 | 
						|
        try:
 | 
						|
            raw_category = request.category
 | 
						|
            category_dict = raw_category.model_dump()
 | 
						|
            del category_dict['id']
 | 
						|
            category = ServiceCategory(**category_dict)
 | 
						|
            self.session.add(category)
 | 
						|
            await self.session.commit()
 | 
						|
            return ServiceCreateCategoryResponse(ok=True, message="Категория успешно создана")
 | 
						|
 | 
						|
        except Exception as e:
 | 
						|
            return ServiceCreateCategoryResponse(ok=False, message=f"Неудалось создать категорию, ошибка: {e}")
 | 
						|
 | 
						|
    async def get_all_categories(self) -> ServiceGetAllCategoriesResponse:
 | 
						|
        query = await (self.session
 | 
						|
                       .scalars(select(ServiceCategory)
 | 
						|
                                .order_by(ServiceCategory.id)))
 | 
						|
        categories = []
 | 
						|
        for category in query.all():
 | 
						|
            categories.append(ServiceCategorySchema.model_validate(category))
 | 
						|
        return ServiceGetAllCategoriesResponse(categories=categories)
 |