diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py index f17f486ddcb0a6476b4e5465e0fa5a32150c2efd..0400657ef05892bda1917c908104afe797a34e0c 100644 --- a/unisportomat/quiz/serializers.py +++ b/unisportomat/quiz/serializers.py @@ -2,7 +2,7 @@ Serializers creating JSONs for every Model from .models """ from rest_framework import serializers -from .models import Sport, Criterion, Question +from .models import Sport, Criterion, Question, CriterionRating class SportListSerializer(serializers.ModelSerializer): @@ -52,3 +52,38 @@ class SmallSportListSerializer(serializers.BaseSerializer): ) return serialized_data + + +class SingleSportSerializer(serializers.BaseSerializer): + def to_representation(self, sport): + + serialized_data = {} + + serialized_data["pk"] = sport.pk + serialized_data["name"] = sport.name + serialized_data["url"] = sport.url + + criteria = [] + + for criterion in sport.criteria_ratings.iterator(): + criterion_data = {} + + criterion_data["pk"] = criterion.pk + criterion_data["name"] = criterion.name + + # The iterator iterates over the Criterions connected, and not the criterion connection itself, so we need to get that one again + criterion_data["value"] = CriterionRating.objects.get( + criterion=criterion.pk, sport=sport.pk + ).rating + + criteria.append(criterion_data) + + serialized_data["criteria"] = criteria + + return serialized_data + + def to_internal_value(self, request): + + # Probably do some Testing and Data Verification here? + + return request.data diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py index 5c528aaa291132aed38157a2aa0797c290aa9cd7..8aca5df270a261fb923e99f11c5f9c8fb85060d1 100644 --- a/unisportomat/quiz/views.py +++ b/unisportomat/quiz/views.py @@ -11,6 +11,7 @@ from .serializers import ( SportListSerializer, CriterionListSerializer, QuestionListSerializer, + SingleSportSerializer, ) from .models import Sport, Criterion, Question @@ -56,9 +57,30 @@ class SmallSportListView(viewsets.ViewSet): TODO: More Documentation """ + # GET for api/admin/sport/ def list(self, request): - return Response({"test": 0}) + 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: @@ -75,6 +97,8 @@ class SmallSportListAPIView(APIView): TODO: More Documentation """ + authentication_classes = [] + def get(self, request): sports = Sport.objects.all() @@ -103,3 +127,52 @@ class SmallSportListAPIView(APIView): serializer = SmallSportListSerializer(is_filled_tuples) 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): + + data_dict = SingleSportSerializer().to_internal_value(request) + + print(data_dict) + + new_sport = Sport() + + new_sport.name = data_dict["name"] + new_sport.url = data_dict["url"] + + # Before writing other Database Entries for Rating, the Sport needs to be saved once + new_sport.save() + + for criterion in data_dict["criteria"]: + new_sport.rate( + Criterion.objects.get(pk=criterion["pk"]), criterion["value"] + ) + + new_sport.save() + + response = SingleSportSerializer(new_sport) + + return Response(response.data) diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py index 480adf19d9a3e7df3cb94f470ca79d3f908f46d3..de0f819dfbd215935161f5771f64d36cfe83785f 100644 --- a/unisportomat/unisportomat/urls.py +++ b/unisportomat/unisportomat/urls.py @@ -27,5 +27,7 @@ router.register(r"small-sport-list", views.SmallSportListView, "small-sport-list urlpatterns = [ path("admin/", admin.site.urls), path("api/admin/", include(router.urls)), - path(r"api/admin/single-small-sport-list", views.SmallSportListAPIView.as_view()), + 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()), ]