Merge remote-tracking branch 'origin/main'

# Conflicts:
#	app/search/api/serializers.py
This commit is contained in:
Alexander Karpov 2022-10-21 23:34:59 +03:00
commit 41d2217175
4 changed files with 34 additions and 5 deletions

View File

@ -1,7 +1,8 @@
from django.urls import path
from search.api.views import SearchApi
from search.api.views import SearchApi, HintApi
urlpatterns = [
path("search", SearchApi.as_view(), name="search_api")
path("search", SearchApi.as_view(), name="search_api"),
path("hint", HintApi.as_view(), name="hint api")
]

View File

@ -19,3 +19,15 @@ class ResponseSerializer(serializers.Serializer):
def update(self, instance, validated_data):
raise NotImplementedError
class HintRequestSerializer(serializers.Serializer):
content = serializers.CharField()
def create(self, validated_data):
raise NotImplemented
class HintResponseSerializer(serializers.Serializer):
type = serializers.CharField()
content = serializers.CharField()

View File

@ -3,12 +3,13 @@ from drf_yasg.utils import swagger_auto_schema
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from search.api.serializers import HintRequestSerializer
from search.api.serializers import SearchSerializer, ResponseSerializer
from search.api.serializers import SearchSerializer, ResponseSerializer, HintResponseSerializer
from search.services.search import process_string
user_response = openapi.Response("search results", ResponseSerializer)
hint_response = openapi.Response("hints", HintResponseSerializer)
class SearchApi(APIView):
@swagger_auto_schema(request_body=SearchSerializer, responses={200: user_response})
@ -18,3 +19,17 @@ class SearchApi(APIView):
return Response(
process_string(serializer.data["body"]), status=status.HTTP_200_OK
)
class HintApi(APIView):
@swagger_auto_schema(request_body=HintRequestSerializer, responses={200: hint_response})
def post(self, request, format=None):
serializer = HintRequestSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
return Response(
{
'type': 'category',
'value': serializer.data['content']
},
status=status.HTTP_200_OK
)

View File

@ -1,5 +1,6 @@
from search.models import Product
from typing import List
def process_string(text: str) -> [dict]:
def process_string(text: str) -> List[dict]:
return [x.serialize_self() for x in Product.objects.filter(name__contains=text)[5:]]