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