From ccc13d3f4b8f86e55b1464d4e8f3963ebcbcab8c Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Sun, 4 Oct 2026 16:51:02 +0330 Subject: [PATCH] feat(hadis): support category search across all levels and leaf categories --- apps/hadis/views/category.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) 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)