diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py index 8aca5df270a261fb923e99f11c5f9c8fb85060d1..7207d88ef558aabcd8c067abd98f2eb689da85b3 100644 --- a/unisportomat/quiz/views.py +++ b/unisportomat/quiz/views.py @@ -6,6 +6,7 @@ Defines the views for the API from rest_framework import viewsets from rest_framework.views import APIView from rest_framework.response import Response +from django.http import JsonResponse from .serializers import ( SmallSportListSerializer, SportListSerializer, @@ -57,49 +58,10 @@ class SmallSportListView(viewsets.ViewSet): TODO: More Documentation """ - # GET for api/admin/sport/ - def list(self, request): - - return Response({"test": "Showing all Entries"}) - - # POST for api/admin/sport/ - def create(self, request): - - return Response({"test": "Creating a new Entry"}) - - # GET for api/admin/sport/<id>/ - def retrieve(self, request, pk=None): - - return Response({"test": "Getting a Single Entry"}) - - # PUT for api/admin/sport/<id>/ - def update(self, request, pk=None): - - return Response({"test": "Updating a Single Entry"}) - - # DELETE for api/admin/sport/<id>/ - def destroy(self, request, pk=None): - - return Response({"test": "Removing a Single Entry"}) - - -# Dev Notes: -# - This is a singular APIView which isn't meant to expose complete lists -# - It cannot be written into the Router, as it isn't a Viewset, so it is written directly into the urls.py's urlspatterns like this: -# path(r"api/admin/single-small-sport-list", views.SmallSportListAPIView.as_view()) -# - The API isn't in the list in /api/admin because of that, but needs to be called manually here: -# http://localhost:8000/api/admin/single-small-sport-list - - -class SmallSportListAPIView(APIView): - """ - View for the List of Sports on the Sport Homepage - TODO: More Documentation - """ - authentication_classes = [] - def get(self, request): + # GET for api/admin/sport/ + def list(self, request): sports = Sport.objects.all() criteria = Criterion.objects.all() @@ -128,31 +90,8 @@ class SmallSportListAPIView(APIView): return Response(serializer.data) - -class SingleSportAPIView(APIView): - - authentication_classes = [] - - def get(self, request, pk): - - return Response(SingleSportSerializer(Sport.objects.get(pk=pk)).data) - - def put(self, request, pk): - - data_dict = SingleSportSerializer().to_internal_value(request) - - sport = Sport.objects.get(pk=pk) - - print(data_dict) - - return Response([]) - - -class CreateSportAPIView(APIView): - - authentication_classes = [] - - def post(self, request): + # POST for api/admin/sport/ + def create(self, request): data_dict = SingleSportSerializer().to_internal_value(request) @@ -176,3 +115,46 @@ class CreateSportAPIView(APIView): response = SingleSportSerializer(new_sport) return Response(response.data) + + # GET for api/admin/sport/<id>/ + def retrieve(self, request, pk=None): + + try: + sport = Sport.objects.get(pk=pk) + except: + return JsonResponse( + { + "status_code": 404, + "error": f"No Sport with ID {pk} found", + }, + status=404, + ) + + return Response(SingleSportSerializer(sport).data) + + # PUT for api/admin/sport/<id>/ + def update(self, request, pk=None): + """ + TODO + """ + + data_dict = SingleSportSerializer().to_internal_value(request) + + sport = Sport.objects.get(pk=pk) + + print(data_dict) + + return Response({"test": "Updating a Single Entry"}) + + # DELETE for api/admin/sport/<id>/ + def destroy(self, request, pk=None): + + return Response({"test": "Removing a Single Entry"}) + + +# Dev Notes: +# - This is a singular APIView which isn't meant to expose complete lists +# - It cannot be written into the Router, as it isn't a Viewset, so it is written directly into the urls.py's urlspatterns like this: +# path(r"api/admin/single-small-sport-list", views.SmallSportListAPIView.as_view()) +# - The API isn't in the list in /api/admin because of that, but needs to be called manually here: +# http://localhost:8000/api/admin/single-small-sport-list diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py index de0f819dfbd215935161f5771f64d36cfe83785f..06f8bb10976e1bc4354e850e4d1688d026b4a68f 100644 --- a/unisportomat/unisportomat/urls.py +++ b/unisportomat/unisportomat/urls.py @@ -27,7 +27,4 @@ router.register(r"small-sport-list", views.SmallSportListView, "small-sport-list urlpatterns = [ path("admin/", admin.site.urls), path("api/admin/", include(router.urls)), - path("api/admin/single-small-sport-list", views.SmallSportListAPIView.as_view()), - path("api/admin/single-sport/<int:pk>", views.SingleSportAPIView.as_view()), - path("api/admin/single-sport", views.CreateSportAPIView.as_view()), ]