backend/app/search/api/views.py

52 lines
2.1 KiB
Python
Raw Normal View History

2022-10-21 21:39:04 +03:00
from drf_yasg import openapi
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
2022-10-21 23:22:14 +03:00
from search.api.serializers import HintRequestSerializer
2022-10-21 21:39:04 +03:00
2022-10-22 03:09:14 +03:00
from search.api.serializers import SearchSerializer, ResponseSerializer, HintResponseSerializer, AutoCompleteRequestSerializer, AutoCompleteResponseSerializer
2022-10-21 21:39:04 +03:00
from search.services.search import process_string
2022-10-22 03:09:14 +03:00
from search.services.autocomplete_schema import autocomplete_schema
2022-10-21 21:39:04 +03:00
2022-10-21 23:57:39 +03:00
from search.services.hints import get_hints
2022-10-21 21:39:04 +03:00
user_response = openapi.Response("search results", ResponseSerializer)
2022-10-21 23:22:14 +03:00
hint_response = openapi.Response("hints", HintResponseSerializer)
2022-10-22 03:09:14 +03:00
autocomplete_response = openapi.Response("autocomplete schema", AutoCompleteResponseSerializer)
2022-10-21 21:39:04 +03:00
class SearchApi(APIView):
@swagger_auto_schema(request_body=SearchSerializer, responses={200: user_response})
def post(self, request, format=None):
serializer = SearchSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
return Response(
process_string(serializer.data["body"]), status=status.HTTP_200_OK
)
2022-10-21 23:22:14 +03:00
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(
{
2022-10-21 23:57:39 +03:00
'type': get_hints(serializer.data['content']),
2022-10-21 23:22:14 +03:00
'value': serializer.data['content']
},
status=status.HTTP_200_OK
2022-10-22 03:09:14 +03:00
)
class AutoCompleteApi(APIView):
@swagger_auto_schema(request_body=AutoCompleteRequestSerializer, responses={200: autocomplete_response})
def post(self, request, format=None):
serializer = AutoCompleteRequestSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
return Response(
{
'nodes': autocomplete_schema(serializer.data['content'])
}, status=status.HTTP_200_OK
)