From d45a5898882f22f24305b82deffe1b0ba0950334 Mon Sep 17 00:00:00 2001 From: Dominik Seeger <dominik.seeger@gmx.net> Date: Tue, 6 Aug 2019 15:23:28 +0200 Subject: [PATCH] put the final by reviewer logic in the serializer --- core/serializers/feedback.py | 11 ++++++++++- core/views/feedback.py | 8 -------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/serializers/feedback.py b/core/serializers/feedback.py index 92416e1e..5a6749ec 100644 --- a/core/serializers/feedback.py +++ b/core/serializers/feedback.py @@ -7,7 +7,7 @@ from rest_framework import serializers from rest_framework.utils import html from core import models -from core.models import Feedback +from core.models import Feedback, UserAccount from util.factories import GradyUserFactory from .generic import DynamicFieldsModelSerializer @@ -121,8 +121,12 @@ class FeedbackSerializer(DynamicFieldsModelSerializer): submission = validated_data.pop('of_submission') feedback_lines = validated_data.pop('feedback_lines', []) labels = validated_data.pop('labels', []) + user = UserAccount.objects.get(username=str(self.context['request'].user)) feedback = Feedback.objects.create(of_submission=submission, **validated_data) + if user.role == UserAccount.REVIEWER: + feedback.final_by_reviewer = self.context['request'].data['is_final'] + for label in labels: feedback.labels.add(label) @@ -141,6 +145,11 @@ class FeedbackSerializer(DynamicFieldsModelSerializer): @transaction.atomic def update(self, feedback, validated_data): + user = UserAccount.objects.get(username=str(self.context['request'].user)) + + if user.role == UserAccount.REVIEWER: + feedback.final_by_reviewer = self.context['request'].data['is_final'] + for comment in validated_data.pop('feedback_lines', []): labels = comment.pop('labels', []) comment_instance, _ = models.FeedbackComment.objects.update_or_create( diff --git a/core/views/feedback.py b/core/views/feedback.py index 113e1cc8..e7ccfb22 100644 --- a/core/views/feedback.py +++ b/core/views/feedback.py @@ -32,10 +32,6 @@ class FeedbackApiView( user_is_tutor = self.request.user.role == models.UserAccount.TUTOR return feedback_final_by_reviewer and user_is_tutor - def _set_final_by_reviewer(self, serializer): - feedback_final_by_reviewer = serializer.validated_data.get('is_final', True) - serializer.save(final_by_reviewer=feedback_final_by_reviewer) - def _get_implicit_assignment_for_user(self, submission): """ Check for tutor if it exists. Not relevant for reviewer """ try: @@ -97,8 +93,6 @@ class FeedbackApiView( {'For tutors it is not allowed to create feedback final.'}, status=status.HTTP_403_FORBIDDEN) - self._set_final_by_reviewer(serializer) - self.perform_create(serializer) return Response(serializer.data, status=status.HTTP_201_CREATED) @@ -119,8 +113,6 @@ class FeedbackApiView( raise PermissionDenied( detail='Cannot set the first feedback final.') - self._set_final_by_reviewer(serializer) - serializer.save() return Response(serializer.data) -- GitLab