from django.shortcuts import get_object_or_404 from rest_framework.decorators import api_view, permission_classes from rest_framework.exceptions import PermissionDenied from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from vbv_lernwelt.core.models import User from vbv_lernwelt.course.models import CourseCompletion from vbv_lernwelt.learning_mentor.models import LearningMentor from vbv_lernwelt.learnpath.models import LearningUnit from vbv_lernwelt.self_evaluation_feedback.models import ( CourseCompletionFeedback, SelfEvaluationFeedback, ) from vbv_lernwelt.self_evaluation_feedback.serializers import ( SelfEvaluationFeedbackSerializer, ) @api_view(["POST"]) @permission_classes([IsAuthenticated]) def start_self_evaluation_feedback(request, learning_unit_id): feedback_provider_user_id = request.data.get("feedback_provider_user_id") learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id) feedback_provider_user = get_object_or_404(User, id=feedback_provider_user_id) if not LearningMentor.objects.filter( course=learning_unit.get_course(), mentor=feedback_provider_user, participants__user=request.user, ).exists(): raise PermissionDenied() # calling start multiple times shall be a no-op _, created = SelfEvaluationFeedback.objects.get_or_create( feedback_requester_user=request.user, feedback_provider_user=feedback_provider_user, learning_unit=learning_unit, ) if created: # TODO: Create notification for feedback_provider_user ... return Response({"success": True}) @api_view(["PUT"]) @permission_classes([IsAuthenticated]) def submit_provider_self_evaluation_feedback(request, feedback_id): feedback = get_object_or_404( SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user ) feedback.feedback_submitted = True feedback.save() return Response({"success": True}) @api_view(["GET"]) @permission_classes([IsAuthenticated]) def get_self_evaluation_feedback_as_provider(request, learning_unit_id): feedback = get_object_or_404( SelfEvaluationFeedback, learning_unit_id=learning_unit_id, feedback_provider_user=request.user, ) return Response(SelfEvaluationFeedbackSerializer(feedback).data) @api_view(["GET"]) @permission_classes([IsAuthenticated]) def get_self_evaluation_feedback_as_requester(request, learning_unit_id): learning_unit = get_object_or_404(LearningUnit, id=learning_unit_id) feedback = get_object_or_404( SelfEvaluationFeedback, learning_unit=learning_unit, feedback_requester_user=request.user, ) return Response(SelfEvaluationFeedbackSerializer(feedback).data) @api_view(["PUT"]) @permission_classes([IsAuthenticated]) def add_provider_self_evaluation_feedback(request, feedback_id): feedback_assessment = request.data.get("feedback_assessment") feedback = get_object_or_404( SelfEvaluationFeedback, id=feedback_id, feedback_provider_user=request.user ) course_completion = get_object_or_404( CourseCompletion, id=request.data.get("course_completion_id"), user=feedback.feedback_requester_user, ) ( course_completion_feedback, created, ) = CourseCompletionFeedback.objects.get_or_create( feedback=feedback, course_completion=course_completion, defaults={"feedback_assessment": feedback_assessment}, ) if not created: course_completion_feedback.feedback_assessment = feedback_assessment course_completion_feedback.save() return Response({"success": True})