feat: ud service
This commit is contained in:
		@@ -38,6 +38,30 @@ async def create(
 | 
				
			|||||||
    return await ServiceService(session).create(request)
 | 
					    return await ServiceService(session).create(request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@service_router.post(
 | 
				
			||||||
 | 
					    '/update',
 | 
				
			||||||
 | 
					    response_model=ServiceUpdateResponse,
 | 
				
			||||||
 | 
					    operation_id="update_service"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					async def update(
 | 
				
			||||||
 | 
					        session: Annotated[AsyncSession, Depends(get_session)],
 | 
				
			||||||
 | 
					        request: ServiceUpdateRequest
 | 
				
			||||||
 | 
					):
 | 
				
			||||||
 | 
					    return await ServiceService(session).update(request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@service_router.post(
 | 
				
			||||||
 | 
					    '/delete',
 | 
				
			||||||
 | 
					    response_model=ServiceDeleteResponse,
 | 
				
			||||||
 | 
					    operation_id="delete_service"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					async def delete(
 | 
				
			||||||
 | 
					        session: Annotated[AsyncSession, Depends(get_session)],
 | 
				
			||||||
 | 
					        request: ServiceDeleteRequest
 | 
				
			||||||
 | 
					):
 | 
				
			||||||
 | 
					    return await ServiceService(session).delete(request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@service_router.get(
 | 
					@service_router.get(
 | 
				
			||||||
    '/categories/get-all',
 | 
					    '/categories/get-all',
 | 
				
			||||||
    response_model=ServiceGetAllCategoriesResponse,
 | 
					    response_model=ServiceGetAllCategoriesResponse,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,14 @@ class ServiceCreateCategoryRequest(CustomModelCamel):
 | 
				
			|||||||
    category: ServiceCategorySchema
 | 
					    category: ServiceCategorySchema
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceUpdateRequest(CustomModelCamel):
 | 
				
			||||||
 | 
					    data: ServiceSchema
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceDeleteRequest(CustomModelCamel):
 | 
				
			||||||
 | 
					    service_id: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# endregion
 | 
					# endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,4 +54,12 @@ class ServiceCreateResponse(OkMessageSchema):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class ServiceCreateCategoryResponse(OkMessageSchema):
 | 
					class ServiceCreateCategoryResponse(OkMessageSchema):
 | 
				
			||||||
    pass
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceUpdateResponse(OkMessageSchema):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceDeleteResponse(OkMessageSchema):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
# endregion
 | 
					# endregion
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,12 @@
 | 
				
			|||||||
from sqlalchemy import select
 | 
					from sqlalchemy import select, update
 | 
				
			||||||
from sqlalchemy.orm import joinedload
 | 
					from sqlalchemy.orm import joinedload
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from models import Service, ServiceCategory
 | 
					from models import Service, ServiceCategory
 | 
				
			||||||
from services.base import BaseService
 | 
					from services.base import BaseService
 | 
				
			||||||
from schemas.service import ServiceGetAllResponse, ServiceSchema, ServiceGetAllCategoriesResponse, \
 | 
					from schemas.service import ServiceGetAllResponse, ServiceSchema, ServiceGetAllCategoriesResponse, \
 | 
				
			||||||
    ServiceCategorySchema, ServiceCreateRequest, ServiceCreateResponse, ServiceCreateCategoryRequest, \
 | 
					    ServiceCategorySchema, ServiceCreateRequest, ServiceCreateResponse, ServiceCreateCategoryRequest, \
 | 
				
			||||||
    ServiceCreateCategoryResponse
 | 
					    ServiceCreateCategoryResponse, ServiceUpdateRequest, ServiceUpdateResponse, ServiceDeleteResponse, \
 | 
				
			||||||
 | 
					    ServiceDeleteRequest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ServiceService(BaseService):
 | 
					class ServiceService(BaseService):
 | 
				
			||||||
@@ -33,6 +34,42 @@ class ServiceService(BaseService):
 | 
				
			|||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
            return ServiceCreateResponse(ok=False, message=f"Неудалось создать услугу, ошибка: {e}")
 | 
					            return ServiceCreateResponse(ok=False, message=f"Неудалось создать услугу, ошибка: {e}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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)))
 | 
				
			||||||
 | 
					            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']
 | 
				
			||||||
 | 
					            await self.session.execute(
 | 
				
			||||||
 | 
					                update(Service)
 | 
				
			||||||
 | 
					                .where(Service.id == raw_service.id)
 | 
				
			||||||
 | 
					                .values(**service_dict)
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            await self.session.commit()
 | 
				
			||||||
 | 
					            return ServiceUpdateResponse(ok=True, message="Услуга успешно обновлена")
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            return ServiceUpdateResponse(ok=False, message=f"Неудалось обновить услугу, ошибка: {e}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def delete(self, request: ServiceDeleteRequest) -> ServiceDeleteResponse:
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            service = await (self.session
 | 
				
			||||||
 | 
					                             .scalar(select(Service)
 | 
				
			||||||
 | 
					                                     .filter(Service.id == request.service_id)))
 | 
				
			||||||
 | 
					            if not service:
 | 
				
			||||||
 | 
					                return ServiceDeleteResponse(ok=False, message="Услуга не найдена")
 | 
				
			||||||
 | 
					            await self.session.delete(service)
 | 
				
			||||||
 | 
					            await self.session.commit()
 | 
				
			||||||
 | 
					            return ServiceDeleteResponse(ok=True, message="Услуга успешно удалена")
 | 
				
			||||||
 | 
					        except Exception as e:
 | 
				
			||||||
 | 
					            return ServiceDeleteResponse(ok=False, message=f"Неудалось удалить услугу, ошибка: {e}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def create_category(self, request: ServiceCreateCategoryRequest) -> ServiceCreateCategoryResponse:
 | 
					    async def create_category(self, request: ServiceCreateCategoryRequest) -> ServiceCreateCategoryResponse:
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            raw_category = request.category
 | 
					            raw_category = request.category
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user