From 63002b30871099f845416a68e175df70490b433d Mon Sep 17 00:00:00 2001 From: ch20b063 Date: Tue, 26 Mar 2024 11:14:53 +0530 Subject: [PATCH 1/3] search-1 --- backend/projects/views.py | 23 +++++++++++++++++++-- backend/utils/search_response_by_keyword.py | 18 ++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 backend/utils/search_response_by_keyword.py diff --git a/backend/projects/views.py b/backend/projects/views.py index 759cc2b92..b210a7875 100644 --- a/backend/projects/views.py +++ b/backend/projects/views.py @@ -6,7 +6,8 @@ import ast import csv import math - +from utils.search_response_by_keyword import search_response_by_keyword +from utils.pagination import paginate_queryset from django.core.files import File from django.db.models import Count, Q, F, Case, When from django.forms.models import model_to_dict @@ -1444,7 +1445,25 @@ def list_optimized(self, request): projects = projects.order_by(F("published_at").desc(nulls_last=True)) projects_json = ProjectSerializerOptimized(projects, many=True) - return Response(projects_json.data, status=status.HTTP_200_OK) + key_word = request.query_params.get("keyword", None) + key_values_list = [ + "project_type", + "id", + "title", + "project_stage", + "tgt_language", + "workspace_id", + ] + projects_json_search = search_response_by_keyword( + key_word, key_values_list, list(projects_json.data) + ) + projects_json_dict = { + project["id"]: project for project in projects_json_search + } + page = request.query_params.get("page", None) + recordes = request.query_params.get("records", 10) + projects_json_dict = paginate_queryset(projects_json_dict, page, recordes) + return Response(projects_json_dict.values(), status=status.HTTP_200_OK) except Exception: return Response( {"message": "Please Login!"}, status=status.HTTP_400_BAD_REQUEST diff --git a/backend/utils/search_response_by_keyword.py b/backend/utils/search_response_by_keyword.py new file mode 100644 index 000000000..d5a1ac40f --- /dev/null +++ b/backend/utils/search_response_by_keyword.py @@ -0,0 +1,18 @@ +from django.db.models import Q + + +def search_response_by_keyword(keyword, key_values_list, queryset): + if keyword is None: + return queryset + keyword = str(keyword).lower() + # q_objects = Q() + # for key in key_values_list: + # q_objects |= Q(**{f"{key}__icontains": keyword}) + filtered_queryset = [ + item + for item in queryset + if any( + keyword in str(item[key]).lower() for key in key_values_list if key in item + ) + ] + return filtered_queryset From 0feeb3315418bf2f9c46d9e973934f8cd6813d62 Mon Sep 17 00:00:00 2001 From: ch20b063 Date: Tue, 26 Mar 2024 11:41:34 +0530 Subject: [PATCH 2/3] search-2 --- backend/projects/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/projects/views.py b/backend/projects/views.py index b210a7875..4e380291b 100644 --- a/backend/projects/views.py +++ b/backend/projects/views.py @@ -1463,7 +1463,8 @@ def list_optimized(self, request): page = request.query_params.get("page", None) recordes = request.query_params.get("records", 10) projects_json_dict = paginate_queryset(projects_json_dict, page, recordes) - return Response(projects_json_dict.values(), status=status.HTTP_200_OK) + projects_json_response = list(projects_json_dict.values()) + return JsonResponse(projects_json_response, safe=False, status=status.HTTP_200_O) except Exception: return Response( {"message": "Please Login!"}, status=status.HTTP_400_BAD_REQUEST From 446142261cc6fd021d534ca7f7038437187faf09 Mon Sep 17 00:00:00 2001 From: ch20b063 Date: Tue, 26 Mar 2024 11:47:01 +0530 Subject: [PATCH 3/3] search-2 --- backend/projects/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/projects/views.py b/backend/projects/views.py index 4e380291b..7dec6e0fa 100644 --- a/backend/projects/views.py +++ b/backend/projects/views.py @@ -1464,7 +1464,9 @@ def list_optimized(self, request): recordes = request.query_params.get("records", 10) projects_json_dict = paginate_queryset(projects_json_dict, page, recordes) projects_json_response = list(projects_json_dict.values()) - return JsonResponse(projects_json_response, safe=False, status=status.HTTP_200_O) + return JsonResponse( + projects_json_response, safe=False, status=status.HTTP_200_O + ) except Exception: return Response( {"message": "Please Login!"}, status=status.HTTP_400_BAD_REQUEST