From 19498576225aa4d66e61c3d95ad5980c54b21a01 Mon Sep 17 00:00:00 2001
From: borzechof99 <borzechof99@mi.fu-berlin.de>
Date: Thu, 27 May 2021 20:33:40 +0200
Subject: [PATCH] Set Up API, add Views for Sports and Criterions

Co-authored-by: Dominik <dominip89@mi.fu-berlin.de>
Co-authored-by: Josie <josiepark@mi.fu-berlin.de>
---
 requirements.txt                      |  3 ---
 unisportomat/quiz/admin.py            |  4 +++-
 unisportomat/quiz/serializers.py      | 25 +++++++++++++++++++++++++
 unisportomat/quiz/views.py            | 27 ++++++++++++++++++++++++++-
 unisportomat/unisportomat/settings.py | 11 ++++++++++-
 unisportomat/unisportomat/urls.py     | 11 +++++++++--
 6 files changed, 73 insertions(+), 8 deletions(-)
 create mode 100644 unisportomat/quiz/serializers.py

diff --git a/requirements.txt b/requirements.txt
index 8461072..4634623 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,9 +9,6 @@ requests==2.25.1
 soupsieve==2.2.1
 sqlparse==0.4.1
 urllib3==1.26.4
-<<<<<<< HEAD
 Pillow==8.2.0
-=======
 django-cors-headers==3.7.0
 djangorestframework==3.12.4
->>>>>>> Add CORS-Header and REST-Framework to Requirements
diff --git a/unisportomat/quiz/admin.py b/unisportomat/quiz/admin.py
index d8fd657..c3e5d65 100644
--- a/unisportomat/quiz/admin.py
+++ b/unisportomat/quiz/admin.py
@@ -3,6 +3,8 @@
 from django.contrib import admin
 
 # Register your models here.
-from .models import Sport
+from .models import Sport, Criterion, CriterionRating
 
 admin.site.register(Sport)
+admin.site.register(Criterion)
+admin.site.register(CriterionRating)
diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py
new file mode 100644
index 0000000..6c4b25e
--- /dev/null
+++ b/unisportomat/quiz/serializers.py
@@ -0,0 +1,25 @@
+"""
+Serializers creating JSONs for every Model from .models
+"""
+from rest_framework import serializers
+from .models import Sport, Criterion
+
+
+class SportListSerializer(serializers.ModelSerializer):
+    """
+    Serializes all sports.
+    """
+
+    class Meta:
+        model = Sport
+        fields = ("id", "name", "url", "criteria_ratings")
+
+
+class CriterionListSerializer(serializers.ModelSerializer):
+    """
+    Serializes Criterions
+    """
+
+    class Meta:
+        model = Criterion
+        fields = ("id", "name", "sport_ratings")
diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py
index 4748ab8..c512052 100644
--- a/unisportomat/quiz/views.py
+++ b/unisportomat/quiz/views.py
@@ -1,3 +1,28 @@
-""" Defines the views for the quiz app """
+"""
+Defines the views for the API
+"""
+
+from django.shortcuts import render
+from rest_framework import viewsets
+from .serializers import SportListSerializer, CriterionListSerializer
+from .models import Sport, Criterion
 
 # Create your views here.
+
+
+class SportListView(viewsets.ModelViewSet):
+    """
+    A View returning every Sport Object
+    """
+
+    serializer_class = SportListSerializer
+    queryset = Sport.objects.all()
+
+
+class CriterionListView(viewsets.ModelViewSet):
+    """
+    A View returning every Criterion Object
+    """
+
+    serializer_class = CriterionListSerializer
+    queryset = Criterion.objects.all()
diff --git a/unisportomat/unisportomat/settings.py b/unisportomat/unisportomat/settings.py
index 87cc7f8..1e46314 100644
--- a/unisportomat/unisportomat/settings.py
+++ b/unisportomat/unisportomat/settings.py
@@ -32,13 +32,16 @@ ALLOWED_HOSTS = []
 # Application definition
 
 INSTALLED_APPS = [
-    "quiz.apps.QuizConfig",
+    # "quiz.apps.QuizConfig",
     "django.contrib.admin",
     "django.contrib.auth",
     "django.contrib.contenttypes",
     "django.contrib.sessions",
     "django.contrib.messages",
     "django.contrib.staticfiles",
+    "rest_framework",
+    "corsheaders",
+    "quiz",
 ]
 
 MIDDLEWARE = [
@@ -49,6 +52,7 @@ MIDDLEWARE = [
     "django.contrib.auth.middleware.AuthenticationMiddleware",
     "django.contrib.messages.middleware.MessageMiddleware",
     "django.middleware.clickjacking.XFrameOptionsMiddleware",
+    "corsheaders.middleware.CorsMiddleware",
 ]
 
 ROOT_URLCONF = "unisportomat.urls"
@@ -121,3 +125,8 @@ STATIC_URL = "/static/"
 # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
 
 DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
+
+CORS_ORITIN_WHITELIST = [
+    "http://localhost:3000",  # User Frontend
+    "http://localhost:4000",  # Admin Frontend
+]
diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py
index 6a11f8a..3705949 100644
--- a/unisportomat/unisportomat/urls.py
+++ b/unisportomat/unisportomat/urls.py
@@ -14,8 +14,15 @@ Including another URLconf
     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
 """
 from django.contrib import admin
-from django.urls import path
+from django.urls import path, include
+from rest_framework import routers
+from quiz import views
+
+router = routers.DefaultRouter()
+router.register(r"sport-list", views.SportListView, "sport-list")
+router.register(r"criterion-list", views.CriterionListView, "criterion-list")
 
 urlpatterns = [
     path("admin/", admin.site.urls),
-]
+    path("api/admin/", include(router.urls)),
+]
\ No newline at end of file
-- 
GitLab