diff --git a/backend/core/serializers.py b/backend/core/serializers.py index 08de11b0c72112eddc615341ba8019ab26d1e72a..56ec29e3d8f31420a9837991805950a44d6e31a1 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 f3dde516ff797147d4a777faa79106d18fa87778..a5d9818df236a4818519229846427a9582a84f97 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 690d6cfb0b431fabc9b5e1e7f8e25be22bc58df1..084a4a3e2251352de89027e6506d80dc07746c4b 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