chore: details url for feedbacks
This commit is contained in:
parent
b9c622b20d
commit
d5025e3408
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue