From f2ac5b9f5b1438f52284662e7ac8ebd1ad2cffbc Mon Sep 17 00:00:00 2001
From: janmax <j.michal@stud.uni-goettingen.de>
Date: Sun, 26 Nov 2017 22:54:19 +0100
Subject: [PATCH] Added a ViewSet for SubmissionType (boy that was easy)

---
 backend/core/serializers.py | 22 ++++++++++++++++++++--
 backend/core/urls.py        |  1 +
 backend/core/views.py       | 11 +++++++++--
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/backend/core/serializers.py b/backend/core/serializers.py
index 08de11b0..56ec29e3 100644
--- a/backend/core/serializers.py
+++ b/backend/core/serializers.py
@@ -2,7 +2,8 @@ import logging
 
 from rest_framework import serializers
 
-from core.models import ExamType, Feedback, Student, Submission, Tutor
+from core.models import (ExamType, Feedback, Student, Submission,
+                         SubmissionType, Tutor)
 from util.factories import GradyUserFactory
 
 log = logging.getLogger(__name__)
@@ -24,6 +25,13 @@ class FeedbackSerializer(serializers.ModelSerializer):
         fields = ('text', 'score')
 
 
+class SubmissionTypeSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = SubmissionType
+        fields = ('name', 'full_score', 'description', 'solution')
+
+
 class SubmissionSerializer(serializers.ModelSerializer):
     feedback = serializers.ReadOnlyField(source='feedback.text')
     score = serializers.ReadOnlyField(source='feedback.score')
@@ -46,11 +54,21 @@ class StudentSerializer(serializers.ModelSerializer):
         fields = ('name', 'user', 'exam', 'submissions')
 
 
+class SubmissionNoTextFieldsSerializer(serializers.ModelSerializer):
+    score = serializers.ReadOnlyField(source='feedback.score')
+    type = serializers.ReadOnlyField(source='type.name')
+    full_score = serializers.ReadOnlyField(source='type.full_score')
+
+    class Meta:
+        model = Submission
+        fields = ('type', 'score', 'full_score')
+
+
 class StudentSerializerForListView(serializers.ModelSerializer):
     name = serializers.ReadOnlyField(source='user.fullname')
     user = serializers.ReadOnlyField(source='user.username')
     exam = serializers.ReadOnlyField(source='exam.module_reference')
-    submissions = SubmissionSerializer(many=True)
+    submissions = SubmissionNoTextFieldsSerializer(many=True)
 
     class Meta:
         model = Student
diff --git a/backend/core/urls.py b/backend/core/urls.py
index f3dde516..a5d9818d 100644
--- a/backend/core/urls.py
+++ b/backend/core/urls.py
@@ -8,6 +8,7 @@ from core import views
 # Create a router and register our viewsets with it.
 router = DefaultRouter()
 router.register(r'examtype', views.ExamApiViewSet)
+router.register(r'submissiontype', views.SubmissionTypeApiView)
 router.register(r'tutor', views.TutorApiViewSet)
 router.register(r'student', views.StudentReviewerApiViewSet)
 router.register(r'student-page', views.StudentSelfApiViewSet, base_name='student_page')
diff --git a/backend/core/views.py b/backend/core/views.py
index 690d6cfb..084a4a3e 100644
--- a/backend/core/views.py
+++ b/backend/core/views.py
@@ -5,10 +5,11 @@ import logging
 
 from rest_framework import mixins, viewsets
 
-from core.models import ExamType, Student, Tutor
+from core.models import ExamType, Student, SubmissionType, Tutor
 from core.permissions import IsReviewer, IsStudent
 from core.serializers import (ExamSerializer, StudentSerializer,
-                              StudentSerializerForListView, TutorSerializer)
+                              StudentSerializerForListView,
+                              SubmissionTypeSerializer, TutorSerializer)
 
 log = logging.getLogger(__name__)
 
@@ -50,3 +51,9 @@ class StudentReviewerApiViewSet(viewsets.ReadOnlyModelViewSet):
     permission_classes = (IsReviewer,)
     queryset = Student.objects.all()
     serializer_class = StudentSerializerForListView
+
+
+class SubmissionTypeApiView(viewsets.ReadOnlyModelViewSet):
+    """ Gets a list or a detail view of a single SubmissionType """
+    queryset = SubmissionType.objects.all()
+    serializer_class = SubmissionTypeSerializer
-- 
GitLab