Skip to content

Commit

Permalink
Merge pull request #4341 from unicef/rest-updates-2
Browse files Browse the repository at this point in the history
[217273] REST API updates - review changes
  • Loading branch information
domdinicola authored Oct 18, 2024
2 parents b741d44 + c3b052d commit 441bd87
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 30 deletions.
21 changes: 4 additions & 17 deletions src/hct_mis_api/api/endpoints/core/views.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,15 @@
from typing import TYPE_CHECKING, Any

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
from rest_framework.generics import ListAPIView
from rest_framework.response import Response

from hct_mis_api.api.endpoints.base import HOPEAPIView
from hct_mis_api.api.endpoints.core.filters import BusinessAreaFilter
from hct_mis_api.api.endpoints.core.serializers import BusinessAreaSerializer
from hct_mis_api.apps.core.models import BusinessArea

if TYPE_CHECKING:
from rest_framework.request import Request


class BusinessAreaListView(HOPEAPIView, ListAPIView):
serializer_class = BusinessAreaSerializer
queryset = BusinessArea.objects.all()

def list(self, request: "Request", *args: Any, **kwargs: Any) -> Response:
queryset = self.queryset

filterset = BusinessAreaFilter(request.GET, queryset=queryset)
if filterset.is_valid():
queryset = filterset.qs

page = self.paginate_queryset(queryset)
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
filter_backends = (OrderingFilter, DjangoFilterBackend)
filterset_class = BusinessAreaFilter
27 changes: 14 additions & 13 deletions src/hct_mis_api/api/endpoints/rdi/program.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
from typing import TYPE_CHECKING, Any

from django.db.models import QuerySet

from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema
from rest_framework import serializers, status
from rest_framework.exceptions import PermissionDenied
from rest_framework.mixins import CreateModelMixin
from rest_framework.filters import OrderingFilter
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import CreateModelMixin, ListModelMixin
from rest_framework.response import Response

from hct_mis_api.api.endpoints.base import HOPEAPIBusinessAreaViewSet
Expand Down Expand Up @@ -33,10 +38,16 @@ class Meta:
)


class ProgramViewSet(CreateModelMixin, HOPEAPIBusinessAreaViewSet):
class ProgramViewSet(CreateModelMixin, ListModelMixin, HOPEAPIBusinessAreaViewSet, GenericAPIView):
serializer_class = ProgramSerializer
model = Program
permission = Grant.API_READ_ONLY
queryset = Program.objects.all()
pagination_class = None
filter_backends = (OrderingFilter, DjangoFilterBackend)
filterset_class = UpdatedAtFilter

def get_queryset(self) -> QuerySet:
return self.queryset.filter(business_area=self.selected_business_area)

def perform_create(self, serializer_class: "BaseSerializer") -> None:
serializer_class.save(business_area=self.selected_business_area)
Expand All @@ -51,13 +62,3 @@ def create(self, request: "Request", *args: Any, **kwargs: Any) -> Response:
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

def list(self, request: "Request", *args: Any, **kwargs: Any) -> Response:
queryset = self.model.objects.filter(business_area=self.selected_business_area)

filterset = UpdatedAtFilter(request.GET, queryset=queryset)
if filterset.is_valid():
queryset = filterset.qs

serializer = self.serializer_class(queryset, many=True)
return Response(serializer.data)

0 comments on commit 441bd87

Please sign in to comment.