diff --git a/apps/hadis/views/category.py b/apps/hadis/views/category.py index 37d9220..b72a168 100644 --- a/apps/hadis/views/category.py +++ b/apps/hadis/views/category.py @@ -475,6 +475,14 @@ class CategoriesView(ListAPIView): ).filter( Q(active_hadis_count__gt=0) | Q(children_total_count__gt=0) | Q(source_type=HadisCategory.SourceType.QURAN) ) + search_query = (self.request.query_params.get('search') or '').strip() + if search_query: + queryset = queryset.filter( + Q(title__icontains=search_query) | + Q(slug__icontains=search_query) | + Q(description__icontains=search_query) + ) + is_root = self.request.query_params.get('is_root', '').lower() if is_root in ['true', '1']: queryset = queryset.filter(parent__isnull=True) @@ -504,11 +512,23 @@ class CategoriesBySectView(ListAPIView): ).filter( Q(active_hadis_count__gt=0) | Q(children_total_count__gt=0) | Q(source_type=HadisCategory.SourceType.QURAN) ) - is_root = self.request.query_params.get('is_root', 'true').lower() - if is_root in ['true', '1']: + search_query = (self.request.query_params.get('search') or '').strip() + if search_query: + queryset = queryset.filter( + Q(title__icontains=search_query) | + Q(slug__icontains=search_query) | + Q(description__icontains=search_query) + ) + + is_root_param = self.request.query_params.get('is_root', None) + if is_root_param is not None: + is_root = is_root_param.lower() + if is_root in ['true', '1']: + queryset = queryset.filter(parent__isnull=True) + elif is_root in ['false', '0']: + queryset = queryset.filter(parent__isnull=False) + elif not search_query: queryset = queryset.filter(parent__isnull=True) - elif is_root in ['false', '0']: - queryset = queryset.filter(parent__isnull=False) return apply_category_ordering_and_counts(queryset, self.request)