feat: service category deleting
This commit is contained in:
@@ -17,10 +17,18 @@ class ServiceService(BaseService):
|
||||
query = await (
|
||||
self.session
|
||||
.scalars(
|
||||
select(Service)
|
||||
.options(joinedload(Service.category))
|
||||
.order_by(Service.rank)
|
||||
.filter(Service.is_deleted == False)
|
||||
select(
|
||||
Service
|
||||
)
|
||||
.options(
|
||||
joinedload(Service.category)
|
||||
)
|
||||
.order_by(
|
||||
Service.rank
|
||||
)
|
||||
.filter(
|
||||
Service.is_deleted == False
|
||||
)
|
||||
)
|
||||
)
|
||||
services_raw = query.all()
|
||||
@@ -35,9 +43,15 @@ class ServiceService(BaseService):
|
||||
category_ids = list(set([service.category_id for service in services_raw]))
|
||||
rest_categories = await (
|
||||
self.session
|
||||
.scalars(select(ServiceCategory)
|
||||
.where(ServiceCategory.id.notin_(category_ids))
|
||||
)
|
||||
.scalars(
|
||||
select(
|
||||
ServiceCategory
|
||||
)
|
||||
.where(
|
||||
ServiceCategory.id.notin_(category_ids),
|
||||
ServiceCategory.is_deleted == False
|
||||
)
|
||||
)
|
||||
)
|
||||
for category in rest_categories:
|
||||
for service_type in [ServiceType.DEAL_SERVICE, ServiceType.PRODUCT_SERVICE]:
|
||||
@@ -456,3 +470,48 @@ class ServiceService(BaseService):
|
||||
return ServiceUpdateResponse(ok=True, message="Категория успешно обновлена")
|
||||
except Exception as e:
|
||||
return ServiceUpdateResponse(ok=False, message=f"Неудалось обновить категорию, ошибка: {e}")
|
||||
|
||||
async def delete_category(self, request: ServiceDeleteCategoryRequest) -> ServiceDeleteResponse:
|
||||
try:
|
||||
active_services = await self.session.scalars(
|
||||
select(
|
||||
Service
|
||||
)
|
||||
.where(
|
||||
Service.category_id == request.category_id,
|
||||
Service.is_deleted == False
|
||||
)
|
||||
)
|
||||
if active_services.first():
|
||||
return ServiceDeleteResponse(ok=False, message="Категория используется в услугах")
|
||||
|
||||
# Check if category is used in deleted services
|
||||
deleted_services = await self.session.scalars(
|
||||
select(
|
||||
Service
|
||||
)
|
||||
.where(
|
||||
Service.category_id == request.category_id,
|
||||
Service.is_deleted == True
|
||||
)
|
||||
)
|
||||
category = await self.session.scalar(
|
||||
select(
|
||||
ServiceCategory
|
||||
)
|
||||
.filter(
|
||||
ServiceCategory.id == request.category_id
|
||||
)
|
||||
)
|
||||
if not category:
|
||||
return ServiceDeleteResponse(ok=False, message="Категория не найдена")
|
||||
|
||||
if deleted_services.first():
|
||||
category.is_deleted = True
|
||||
else:
|
||||
await self.session.delete(category)
|
||||
|
||||
await self.session.commit()
|
||||
return ServiceDeleteResponse(ok=True, message="Категория успешно удалена")
|
||||
except Exception as e:
|
||||
return ServiceDeleteResponse(ok=False, message=f"Неудалось удалить категорию, ошибка: {e}")
|
||||
|
||||
Reference in New Issue
Block a user