diff --git a/server/apps/sites/urls.py b/server/apps/sites/urls.py index 543ca1b80..572b790e1 100644 --- a/server/apps/sites/urls.py +++ b/server/apps/sites/urls.py @@ -1,11 +1,11 @@ from django.urls import include, path from apps.sites.views import ( # type: ignore + HandlerSearchView, RcraSiteView, SiteDetailView, SiteListView, SiteSearchView, - rcrainfo_site_search_view, ) urlpatterns = [ @@ -13,7 +13,7 @@ "rcra/", include( [ - path("handler/search", rcrainfo_site_search_view), + path("handler/search", HandlerSearchView.as_view()), path("handler/", RcraSiteView.as_view()), ] ), diff --git a/server/apps/sites/views/__init__.py b/server/apps/sites/views/__init__.py index 714c21573..8db3500e3 100644 --- a/server/apps/sites/views/__init__.py +++ b/server/apps/sites/views/__init__.py @@ -1,7 +1,7 @@ from .site_views import ( # type: ignore + HandlerSearchView, RcraSiteView, SiteDetailView, SiteListView, SiteSearchView, - rcrainfo_site_search_view, ) diff --git a/server/apps/sites/views/site_views.py b/server/apps/sites/views/site_views.py index 5a4114009..f43e507dd 100644 --- a/server/apps/sites/views/site_views.py +++ b/server/apps/sites/views/site_views.py @@ -2,13 +2,13 @@ from django.utils.decorators import method_decorator from django.views.decorators.cache import cache_page -from drf_spectacular.utils import extend_schema -from rest_framework import permissions, status -from rest_framework.decorators import api_view +from drf_spectacular.utils import extend_schema, inline_serializer +from rest_framework import permissions, serializers, status from rest_framework.exceptions import ValidationError from rest_framework.generics import ListAPIView, RetrieveAPIView from rest_framework.request import Request from rest_framework.response import Response +from rest_framework.views import APIView from apps.sites.models import RcraSite, RcraSiteType, Site # type: ignore from apps.sites.serializers import RcraSiteSerializer, SiteSerializer # type: ignore @@ -102,18 +102,26 @@ def get_queryset(self): } -@api_view(["POST"]) -def rcrainfo_site_search_view(request: Request): +@extend_schema( + responses=RcraSiteSerializer(many=True), + request=inline_serializer( + "handler_search", + fields={"siteId": serializers.CharField(), "siteType": serializers.CharField()}, + ), +) +class HandlerSearchView(APIView): """ - Search and return a list of sites from RCRAInfo. + Search and return a list of Hazardous waste handlers from RCRAInfo. """ - try: - site_service = RcraSiteService(username=request.user.username) - data = site_service.search_rcra_site( - epaSiteId=request.data["siteId"], siteType=handler_types[request.data["siteType"]] - ) - return Response(status=status.HTTP_200_OK, data=data["sites"]) - except KeyError: - return Response(status=status.HTTP_400_BAD_REQUEST) - except ValidationError: - return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) + + def post(self, request: Request) -> Response: + try: + site_service = RcraSiteService(username=request.user.username) + data = site_service.search_rcra_site( + epaSiteId=request.data["siteId"], siteType=handler_types[request.data["siteType"]] + ) + return Response(status=status.HTTP_200_OK, data=data["sites"]) + except KeyError: + return Response(status=status.HTTP_400_BAD_REQUEST) + except ValidationError: + return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)