From 5bfbaf4e5fed5c4d852f8703be2a235ae2ee5e20 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Thu, 28 Aug 2025 17:13:49 +0500 Subject: [PATCH] add: add search api --- core/apps/products/urls.py | 4 +++- core/apps/products/views/search.py | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 core/apps/products/views/search.py diff --git a/core/apps/products/urls.py b/core/apps/products/urls.py index 79eda57..5c656f2 100644 --- a/core/apps/products/urls.py +++ b/core/apps/products/urls.py @@ -2,6 +2,7 @@ from django.urls import path, include from core.apps.products.views import category as category_veiws from core.apps.products.views import product as product_views +from core.apps.products.views import search as search_views urlpatterns = [ path('category/', include( @@ -13,5 +14,6 @@ urlpatterns = [ [ path('/list/', product_views.ProductListApiView.as_view()), ] - )) + )), + path('search/', search_views.SearchApiView.as_view()), ] \ No newline at end of file diff --git a/core/apps/products/views/search.py b/core/apps/products/views/search.py new file mode 100644 index 0000000..6860a25 --- /dev/null +++ b/core/apps/products/views/search.py @@ -0,0 +1,26 @@ +from rest_framework import views +from rest_framework.response import Response + +from core.apps.products.models import Product, Category +from core.apps.products.serializers.category import CategoryListSerializer +from core.apps.products.serializers.product import ProductListSerializer + + +class SearchApiView(views.APIView): + permission_classes = [] + + def get(self, request): + search = request.query_param.get('search') + if search is None: + return Response({"success": False, "message": 'search is required'}, status=400) + products = Product.objects.filter(name__istartswith=search) + categories = Category.objects.filter(name__istartswith=search) + + return Response( + { + 'products': ProductListSerializer(products, many=True).data, + 'categories': CategoryListSerializer(categories, many=True).data, + }, + status=200 + ) +