feat: service category deleting

This commit is contained in:
2024-10-09 02:25:56 +03:00
parent 7ee4ce36ce
commit 4994f2c026
4 changed files with 90 additions and 7 deletions

View File

@@ -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}")