chore: details url for feedbacks

This commit is contained in:
Livio Bieri 2023-10-25 16:30:10 +02:00
parent b9c622b20d
commit d5025e3408
5 changed files with 40 additions and 6 deletions

View File

@ -49,6 +49,7 @@ class DashboardQuery(graphene.ObjectType):
return CourseStatisticsType(
id=course.id, # noqa
course_title=course.title, # noqa
course_slug=course.slug, # noqa
course_session_selection_ids=list(course_session_ids), # noqa
)

View File

@ -59,6 +59,7 @@ class CourseProgressType(graphene.ObjectType):
class CourseStatisticsType(graphene.ObjectType):
id = graphene.ID(required=True) # course_id, named id for urql
course_title = graphene.String(required=True)
course_slug = graphene.String(required=True)
course_session_properties = graphene.Field(CourseSessionProperties, required=True)
course_session_selection_ids = graphene.List(graphene.ID, required=True)
course_session_selection_metrics = graphene.Field(
@ -70,16 +71,25 @@ class CourseStatisticsType(graphene.ObjectType):
competences = graphene.Field(Competences, required=True)
def resolve_attendance_day_presences(root, info) -> AttendanceDayPresences:
return attendance_day_presences(root.course_session_selection_ids)
return attendance_day_presences(
course_session_selection_ids=root.course_session_selection_ids
)
def resolve_feedback_responses(root, info) -> FeedbackResponses:
return feedback_responses(root.course_session_selection_ids)
return feedback_responses(
course_session_selection_ids=root.course_session_selection_ids,
course_slug=root.course_slug,
)
def resolve_competences(root, info) -> Competences:
return competences(root.course_session_selection_ids)
return competences(
course_session_selection_ids=root.course_session_selection_ids,
)
def resolve_assignments(root, info) -> Assignments:
return assignments(root.course_session_selection_ids)
return assignments(
course_session_selection_ids=root.course_session_selection_ids
)
def resolve_course_session_selection_metrics(
root, info

View File

@ -19,6 +19,7 @@ class FeedbackRecord(graphene.ObjectType):
circle_id = graphene.ID(required=True)
satisfaction_average = graphene.Float(required=True)
satisfaction_max = graphene.Int(required=True)
details_url = graphene.String(required=True)
class FeedbackResponses(graphene.ObjectType):
@ -28,6 +29,7 @@ class FeedbackResponses(graphene.ObjectType):
def feedback_responses(
course_session_selection_ids: graphene.List(graphene.ID),
course_slug: graphene.String,
) -> FeedbackResponses:
# Get all course sessions for this user in the given course
course_sessions = CourseSession.objects.filter(
@ -44,7 +46,12 @@ def feedback_responses(
)
circle_feedbacks.extend(
circle_feedback_average(fbs, course_session.id, course_session.generation)
circle_feedback_average(
feedbacks=fbs,
course_session_id=course_session.id,
generation=course_session.generation,
course_slug=str(course_slug),
)
)
avg = sum([fb.satisfaction_average for fb in circle_feedbacks]) / len(
@ -62,7 +69,10 @@ def feedback_responses(
def circle_feedback_average(
feedbacks: List[FeedbackResponse], course_session_id, generation: str
feedbacks: List[FeedbackResponse],
course_session_id,
generation: str,
course_slug: str,
):
circle_data = {}
records = []
@ -81,6 +91,7 @@ def circle_feedback_average(
circle_data[circle_id] = {"total": satisfaction, "count": 1}
for circle_id, data in circle_data.items():
details_url = f"/course/{course_slug}/cockpit/feedback/{circle_id}?courseSessionId={course_session_id}"
records.append(
FeedbackRecord(
course_session_id=course_session_id, # noqa
@ -88,6 +99,7 @@ def circle_feedback_average(
circle_id=circle_id, # noqa
satisfaction_average=data["total"] / data["count"], # noqa
satisfaction_max=4, # noqa
details_url=details_url, # noqa
)
)

View File

@ -188,6 +188,7 @@ class DashboardTestCase(GraphQLTestCase):
course_statistics(course_id: $course_id) {{
id
course_title
course_slug
}}
}}
"""
@ -203,6 +204,7 @@ class DashboardTestCase(GraphQLTestCase):
self.assertEqual(course_statistics["id"], str(course_2.id))
self.assertEqual(course_statistics["course_title"], course_2.title)
self.assertEqual(course_statistics["course_slug"], course_2.slug)
def find_dashboard_config_by_course_id(dashboard_configs, course_id):

View File

@ -79,6 +79,7 @@ class DashboardFeedbackTestCase(GraphQLTestCase):
circle_id
satisfaction_average
satisfaction_max
details_url
}}
summary {{
satisfaction_average
@ -109,6 +110,10 @@ class DashboardFeedbackTestCase(GraphQLTestCase):
self.assertEqual(circle1_record["satisfaction_average"], 3.5)
self.assertEqual(circle1_record["course_session_id"], str(course_session.id))
self.assertEqual(circle1_record["generation"], "2023")
self.assertEqual(
circle1_record["details_url"],
f"/course/{course.slug}/cockpit/feedback/{circle1.id}?courseSessionId={course_session.id}",
)
circle2_record = next(
(r for r in records if r["circle_id"] == str(circle2.id)), None
@ -116,6 +121,10 @@ class DashboardFeedbackTestCase(GraphQLTestCase):
self.assertEqual(circle2_record["satisfaction_average"], 1.5)
self.assertEqual(circle2_record["course_session_id"], str(course_session.id))
self.assertEqual(circle2_record["generation"], "2023")
self.assertEqual(
circle2_record["details_url"],
f"/course/{course.slug}/cockpit/feedback/{circle2.id}?courseSessionId={course_session.id}",
)
summary = feedback_responses["summary"]
self.assertEqual(summary["satisfaction_average"], 2.5)