From 22cfa6ff235ffc234083f24113c33ba985c53604 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Thu, 7 Dec 2023 07:40:43 +0100 Subject: [PATCH] Add feedback type, add test feedback --- .../core/management/commands/cypress_reset.py | 62 ++++++++++++++++++- .../course/creators/test_course.py | 1 + .../feedback/graphql/mutations.py | 25 ++++---- server/vbv_lernwelt/feedback/serializers.py | 6 ++ server/vbv_lernwelt/feedback/services.py | 2 + server/vbv_lernwelt/feedback/views.py | 4 +- 6 files changed, 86 insertions(+), 14 deletions(-) diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py index 05fc7f4c..2d8fd4ad 100644 --- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py +++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py @@ -32,7 +32,7 @@ from vbv_lernwelt.course_session.services.attendance import AttendanceUserStatus from vbv_lernwelt.feedback.models import FeedbackResponse from vbv_lernwelt.learnpath.models import ( LearningContentAttendanceCourse, - LearningContentFeedbackUK, + LearningContentFeedbackUK, LearningContentFeedbackVV, ) from vbv_lernwelt.notify.models import Notification @@ -155,6 +155,8 @@ def command( if create_feedback_responses: print("create_feedback_responses") course_session = CourseSession.objects.get(id=TEST_COURSE_SESSION_BERN_ID) + + # feedback fahrzeug learning_content_feedback_page = LearningContentFeedbackUK.objects.get( slug="test-lehrgang-lp-circle-fahrzeug-lc-feedback" ) @@ -174,6 +176,7 @@ def command( "would_recommend": True, "course_negative_feedback": "Nichts Schlechtes", "course_positive_feedback": "Nur Gutes.", + "feedback_type": "uk", }, ) @@ -193,6 +196,7 @@ def command( "would_recommend": True, "course_negative_feedback": "Es wäre praktisch, Zugang zu einer FAQ zu haben.", "course_positive_feedback": "Das Beispiel mit der Katze fand ich sehr gut veranschaulicht!", + "feedback_type": "uk", }, ) @@ -212,6 +216,62 @@ def command( "would_recommend": False, "course_negative_feedback": "Mehr Videos wären schön.", "course_positive_feedback": "Die Präsentation war super", + "feedback_type": "uk", + }, + ) + + # feedback reisen + learning_content_feedback_page = LearningContentFeedbackVV.objects.get( + slug="test-lehrgang-lp-circle-reisen-lc-feedback" + ) + create_feedback_response_data( + feedback_user=User.objects.get(id=TEST_STUDENT1_USER_ID), + course_session=course_session, + learning_content_feedback_page=learning_content_feedback_page, + submitted=True, + feedback_data={ + "satisfaction": 4, + "goal_attainment": 3, + "proficiency": 80, + "preparation_task_clarity": True, + "would_recommend": True, + "course_negative_feedback": "Nichts Schlechtes", + "course_positive_feedback": "Nur Gutes.", + "feedback_type": "vv", + }, + ) + + create_feedback_response_data( + feedback_user=User.objects.get(id=TEST_STUDENT2_USER_ID), + course_session=course_session, + learning_content_feedback_page=learning_content_feedback_page, + submitted=True, + feedback_data={ + "satisfaction": 4, + "goal_attainment": 4, + "proficiency": 100, + "preparation_task_clarity": True, + "would_recommend": True, + "course_negative_feedback": "Es wäre praktisch, Zugang zu einer FAQ zu haben.", + "course_positive_feedback": "Das Beispiel mit der Katze fand ich sehr gut veranschaulicht!", + "feedback_type": "vv", + }, + ) + + create_feedback_response_data( + feedback_user=User.objects.get(id=TEST_STUDENT3_USER_ID), + course_session=course_session, + learning_content_feedback_page=learning_content_feedback_page, + submitted=True, + feedback_data={ + "satisfaction": 2, + "goal_attainment": 2, + "proficiency": 40, + "preparation_task_clarity": True, + "would_recommend": False, + "course_negative_feedback": "Mehr Videos wären schön.", + "course_positive_feedback": "Die Präsentation war super", + "feedback_type": "vv", }, ) diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py index 5905bcbc..9a24e339 100644 --- a/server/vbv_lernwelt/course/creators/test_course.py +++ b/server/vbv_lernwelt/course/creators/test_course.py @@ -361,6 +361,7 @@ def create_feedback_response_data( "would_recommend": True, "course_negative_feedback": "Nichts Schlechtes", "course_positive_feedback": "Nur Gutes.", + "feedback_type": "uk", } return update_feedback_response( diff --git a/server/vbv_lernwelt/feedback/graphql/mutations.py b/server/vbv_lernwelt/feedback/graphql/mutations.py index 2f58b3d2..9b5062c0 100644 --- a/server/vbv_lernwelt/feedback/graphql/mutations.py +++ b/server/vbv_lernwelt/feedback/graphql/mutations.py @@ -50,8 +50,19 @@ class SendFeedbackMutation(graphene.Mutation): if learning_content_type == "learnpath.LearningContentFeedbackVV": learningContentFeedbackModel = LearningContentFeedbackVV - else: + serializerClass = CourseFeedbackSerializerVV + data["feedback_type"] = "vv" + elif learning_content_type == "learnpath.LearningContentFeedbackUK": learningContentFeedbackModel = LearningContentFeedbackUK + serializerClass = CourseFeedbackSerializerUK + data["feedback_type"] = "uk" + else: + errors = [ + ErrorType( + field="learningContentType", messages="Invalid learningContentType" + ) + ] + return SendFeedbackMutation(errors=errors) learning_content = learningContentFeedbackModel.objects.get( id=learning_content_page_id @@ -79,17 +90,7 @@ class SendFeedbackMutation(graphene.Mutation): course_session_id=course_session_id, ) - if learning_content_type == "learnpath.LearningContentFeedbackVV": - serializer = CourseFeedbackSerializerVV(data=data) - elif learning_content_type == "learnpath.LearningContentFeedbackUK": - serializer = CourseFeedbackSerializerUK(data=data) - else: - errors = [ - ErrorType( - field="learningContentType", messages="Invalid learningContentType" - ) - ] - return SendFeedbackMutation(errors=errors) + serializer = serializerClass(data=data) if not serializer.is_valid(): logger.error( diff --git a/server/vbv_lernwelt/feedback/serializers.py b/server/vbv_lernwelt/feedback/serializers.py index 0014d565..63cbe2ae 100644 --- a/server/vbv_lernwelt/feedback/serializers.py +++ b/server/vbv_lernwelt/feedback/serializers.py @@ -5,6 +5,11 @@ from vbv_lernwelt.feedback.models import FeedbackResponse logger = structlog.get_logger(__name__) +FEEDBACK_TYPES = ( + ('uk', 'Feedback UK'), + ('vv', 'Feedback VV'), +) + class FeedbackIntegerField(serializers.IntegerField): def __init__(self, **kwargs): @@ -14,6 +19,7 @@ class FeedbackIntegerField(serializers.IntegerField): class CourseFeedbackSerializerUK(serializers.Serializer): + feedback_type = serializers.ChoiceField(choices=FEEDBACK_TYPES) satisfaction = FeedbackIntegerField() goal_attainment = FeedbackIntegerField() proficiency = serializers.IntegerField(required=False, allow_null=True) diff --git a/server/vbv_lernwelt/feedback/services.py b/server/vbv_lernwelt/feedback/services.py index 27b0da21..6d6979f7 100644 --- a/server/vbv_lernwelt/feedback/services.py +++ b/server/vbv_lernwelt/feedback/services.py @@ -86,6 +86,7 @@ def initial_data_for_feedback_page( "would_recommend": None, "course_negative_feedback": "", "course_positive_feedback": "", + "feedback_type": "uk", } if hasattr(learning_content_feedback_page, "learningcontentfeedbackvv"): return { @@ -96,5 +97,6 @@ def initial_data_for_feedback_page( "would_recommend": None, "course_negative_feedback": "", "course_positive_feedback": "", + "feedback_type": "vv", } return {} diff --git a/server/vbv_lernwelt/feedback/views.py b/server/vbv_lernwelt/feedback/views.py index 7d3bb27f..17e706f9 100644 --- a/server/vbv_lernwelt/feedback/views.py +++ b/server/vbv_lernwelt/feedback/views.py @@ -62,11 +62,13 @@ def get_feedback_for_circle(request, course_session_id, circle_id): ).order_by("created_at") # I guess this is ok for the üK case - feedback_data = {"amount": len(feedbacks), "questions": {}} + feedback_data = {"amount": len(feedbacks), "questions": {}, "feedbackType": None} if feedback_data["amount"] == 0: return Response(status=200, data=feedback_data) + feedback_data["feedbackType"] = feedbacks[0].data.get("feedback_type", None) + for field in FEEDBACK_FIELDS: feedback_data["questions"][field] = []