From e61e6e3aef8e15dfbeb696d8f4ecccf9767a0a2f Mon Sep 17 00:00:00 2001
From: borzechof99 <borzechof99@mi.fu-berlin.de>
Date: Sun, 27 Jun 2021 18:15:44 +0200
Subject: [PATCH] Start Implementation

---
 unisportomat/quiz/serializers.py  | 18 ++++++++++++++++++
 unisportomat/quiz/views.py        | 31 +++++++++++++++++++++++++++++++
 unisportomat/unisportomat/urls.py |  1 +
 3 files changed, 50 insertions(+)

diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py
index 9756a8e..1ebb499 100644
--- a/unisportomat/quiz/serializers.py
+++ b/unisportomat/quiz/serializers.py
@@ -199,3 +199,21 @@ class CriteriaSerializer(serializers.BaseSerializer):
             criteria_list.append(criterion_dict)
 
         return criteria_list
+
+
+class SmallQuestionListSerializer(serializers.BaseSerializer):
+    def to_representation(self, questions):
+
+        question_list = []
+
+        for question in questions:
+            question_list.append(
+                {
+                    "id": question.pk,
+                    "text_de": question.text_de,
+                    "text_en": question.text_en,
+                    "criterion": question.criterion.name,
+                }
+            )
+
+        return question_list
diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py
index 8d7e0cf..4038550 100644
--- a/unisportomat/quiz/views.py
+++ b/unisportomat/quiz/views.py
@@ -18,8 +18,10 @@ from .serializers import (
     SingleSportSerializer,
     CriteriaSerializer,
     IncompleteSportSerializer,
+    SmallQuestionListSerializer,
 )
 from .models import Sport, Criterion, Question
+from .pagination import PageNumberWithPageSizePagination
 
 # Create your views here.
 
@@ -260,3 +262,32 @@ class CriteriaView(APIView):
         response = CriteriaSerializer(data)
 
         return Response(response.data)
+
+
+class SmallQuestionListView(viewsets.ViewSet):
+    """
+    Viewset for Handling Question Lists and Questions
+    """
+
+    # List GET
+    def list(self, request):
+        """
+        api/admin/question GET
+        Returns a Paginated List of all Questions with their ID, German and English Text, and Criterion
+        """
+
+        paginator = PageNumberWithPageSizePagination()
+
+        questions = Question.objects.all().order_by("pk")
+        questions = paginator.paginate_queryset(questions, request)
+
+        response = SmallQuestionListSerializer(questions)
+
+        return paginator.get_paginated_response(response.data)
+
+    # List POST
+    def create(self, request):
+        """
+        api/admin/question POST
+        Takes Values of a new Question and Creates a Question and its corresponding Criterion
+        """
diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py
index 388d94e..d0a61c8 100644
--- a/unisportomat/unisportomat/urls.py
+++ b/unisportomat/unisportomat/urls.py
@@ -23,6 +23,7 @@ router.register(r"sport-list", views.SportListView, "sport-list")
 router.register(r"criterion-list", views.CriterionListView, "criterion-list")
 router.register(r"question-list", views.QuestionListView, "question-list")
 router.register(r"small-sport-list", views.SmallSportListView, "small-sport-list")
+router.register(r"question", views.SmallQuestionListView, "question")
 
 urlpatterns = [
     path("admin/", admin.site.urls),
-- 
GitLab