From a7ca88da7925f5162d436564a06c75e23a915000 Mon Sep 17 00:00:00 2001 From: Livio Bieri Date: Fri, 16 Feb 2024 16:24:38 +0100 Subject: [PATCH] feat: missing stuff in VV comp-navi API --- .../tests/test_api.py | 10 ++++++ .../self_evaluation_feedback/urls.py | 2 +- .../self_evaluation_feedback/utils.py | 8 +++++ .../self_evaluation_feedback/views.py | 36 +++++++++++++++++-- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py b/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py index b13254b8..6ea4ea48 100644 --- a/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py +++ b/server/vbv_lernwelt/self_evaluation_feedback/tests/test_api.py @@ -322,6 +322,14 @@ class SelfEvaluationFeedbackAPI(APITestCase): feedback_assessment["provider_user"]["id"], str(self.mentor.id) ) + aggregate = response.data["aggregates"] + self.assertEqual(aggregate["self_assessment"]["pass"], 1) + self.assertEqual(aggregate["self_assessment"]["fail"], 1) + self.assertEqual(aggregate["self_assessment"]["unknown"], 1) + self.assertEqual(aggregate["feedback_assessment"]["pass"], 1) + self.assertEqual(aggregate["feedback_assessment"]["fail"], 1) + self.assertEqual(aggregate["feedback_assessment"]["unknown"], 1) + def test_no_feedbacks_but_with_completion_status(self): """Case: CourseCompletion but NO feedback""" @@ -432,6 +440,8 @@ class SelfEvaluationFeedbackAPI(APITestCase): result = response.data["results"][0] self.assertEqual(result["title"], learning_unit.title) self.assertEqual(result["id"], learning_unit.id) + self.assertEqual(result["circle_id"], self.circle.id) + self.assertEqual(result["circle_title"], self.circle.title) circles = response.data["circles"] self.assertEqual(len(circles), 1) diff --git a/server/vbv_lernwelt/self_evaluation_feedback/urls.py b/server/vbv_lernwelt/self_evaluation_feedback/urls.py index ab9e7c9b..356c205e 100644 --- a/server/vbv_lernwelt/self_evaluation_feedback/urls.py +++ b/server/vbv_lernwelt/self_evaluation_feedback/urls.py @@ -12,7 +12,7 @@ from vbv_lernwelt.self_evaluation_feedback.views import ( urlpatterns = [ # /requester/* URLs -> For the user who requests feedback path( - "requester//feedbacks", + "requester//feedbacks/summaries", get_self_evaluation_feedbacks_as_requester, name="get_self_evaluation_feedbacks_as_requester", ), diff --git a/server/vbv_lernwelt/self_evaluation_feedback/utils.py b/server/vbv_lernwelt/self_evaluation_feedback/utils.py index 1d3fd5fb..5d2563b0 100644 --- a/server/vbv_lernwelt/self_evaluation_feedback/utils.py +++ b/server/vbv_lernwelt/self_evaluation_feedback/utils.py @@ -112,3 +112,11 @@ def get_self_assessment_counts( fail_count=fail_count, unknown_count=unknown_count, ) + + +def calculate_aggregate(counts: [AssessmentCounts]): + return AssessmentCounts( + pass_count=sum(x.pass_count for x in counts), + fail_count=sum(x.fail_count for x in counts), + unknown_count=sum(x.unknown_count for x in counts), + ) diff --git a/server/vbv_lernwelt/self_evaluation_feedback/views.py b/server/vbv_lernwelt/self_evaluation_feedback/views.py index 24e2eb2e..18aaebc0 100644 --- a/server/vbv_lernwelt/self_evaluation_feedback/views.py +++ b/server/vbv_lernwelt/self_evaluation_feedback/views.py @@ -24,6 +24,7 @@ from vbv_lernwelt.self_evaluation_feedback.serializers import ( from vbv_lernwelt.self_evaluation_feedback.utils import ( get_self_assessment_counts, get_self_evaluation_feedback_counts, + calculate_aggregate, ) @@ -97,6 +98,9 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int): results = [] circle_ids = set() + all_self_assessment_counts = [] + all_feedback_assessment_counts = [] + for learning_unit in LearningUnit.objects.filter( feedback_user=LearningUnitPerformanceFeedbackType.MENTOR_FEEDBACK.value, course_category__course=course_session.course, @@ -104,15 +108,18 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int): circle = learning_unit.get_parent().specific circle_ids.add(circle.id) - feedback_assessment = None - feedback = SelfEvaluationFeedback.objects.filter( learning_unit=learning_unit, feedback_requester_user=request.user, ).first() - if feedback: + if not feedback: + # no feedback given yet + feedback_assessment = None + else: + # feedback given feedback_counts = get_self_evaluation_feedback_counts(feedback) + all_feedback_assessment_counts.append(feedback_counts) feedback_assessment = { "submitted_by_provider": feedback.feedback_submitted, @@ -125,11 +132,14 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int): } self_assessment_counts = get_self_assessment_counts(learning_unit, request.user) + all_self_assessment_counts.append(self_assessment_counts) results.append( { "id": learning_unit.id, "title": learning_unit.title, + "circle_id": circle.id, + "circle_title": circle.title, "feedback_assessment": feedback_assessment, "self_assessment": { "pass": self_assessment_counts.pass_count, @@ -139,12 +149,32 @@ def get_self_evaluation_feedbacks_as_requester(request, course_session_id: int): } ) + self_assessment_counts_aggregate = calculate_aggregate( + counts=all_self_assessment_counts + ) + + feedback_assessment_counts_aggregate = calculate_aggregate( + counts=all_feedback_assessment_counts + ) + return Response( { "results": results, "circles": list( Circle.objects.filter(id__in=circle_ids).values("id", "title") ), + "aggregates": { + "feedback_assessment": { + "pass": feedback_assessment_counts_aggregate.pass_count, + "fail": feedback_assessment_counts_aggregate.fail_count, + "unknown": feedback_assessment_counts_aggregate.unknown_count, + }, + "self_assessment": { + "pass": self_assessment_counts_aggregate.pass_count, + "fail": self_assessment_counts_aggregate.fail_count, + "unknown": self_assessment_counts_aggregate.unknown_count, + }, + }, } )