✨ Feat: [#71] atlas search를 활용한 검색 기능 구현 완료
This commit is contained in:
53
homes/views.py
Normal file
53
homes/views.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status, mixins, viewsets
|
||||
from rest_framework.permissions import AllowAny, IsAuthenticated
|
||||
|
||||
from django.db import transaction
|
||||
|
||||
from .serializers import *
|
||||
from .services import *
|
||||
|
||||
from projects.models import Project
|
||||
from projects.serializers import ProjectListViewSerializer
|
||||
|
||||
from portfolios.models import Portfolio
|
||||
from portfolios.serializers import PortfolioListViewSerializer
|
||||
|
||||
from users.models import User
|
||||
|
||||
class HomeAPIView(APIView):
|
||||
def get(self, request):
|
||||
pass
|
||||
|
||||
class SearchAPIView(APIView):
|
||||
def get(self, request):
|
||||
search_team = request.query_params.get('q', '')
|
||||
object_type = request.query_params.get('type', None)
|
||||
try:
|
||||
page = int(request.query_params.get("page", 1))
|
||||
except ValueError:
|
||||
return Response({"is_page_int": False,"detail": "page and page_size must be integers"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if page < 1:
|
||||
return Response({"is_page_gte_1": False, "detail": "page and page_size must be >= 1"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
page_size = 8
|
||||
|
||||
buckets = NocodetoolSearchService.search(search_team, object_type, page, page_size)
|
||||
project_list = NocodetoolSearchService.get_ids_from_buckets(buckets["projects"])
|
||||
portfolio_list = NocodetoolSearchService.get_ids_from_buckets(buckets["portfolios"])
|
||||
|
||||
projects_data = ProjectListViewSerializer(
|
||||
NocodetoolToObjectService.get_objects_by_ids('project', project_list),
|
||||
many=True).data
|
||||
portfolios_data = PortfolioListViewSerializer(
|
||||
NocodetoolToObjectService.get_objects_by_ids('portfolio', portfolio_list),
|
||||
many=True).data
|
||||
|
||||
return Response({
|
||||
"projects": projects_data,
|
||||
"portfolios": portfolios_data,
|
||||
"page": page,
|
||||
"page_size": page_size
|
||||
}, status=status.HTTP_200_OK)
|
||||
Reference in New Issue
Block a user