vbv/server/vbv_lernwelt/dashboard/graphql/queries.py

71 lines
2.7 KiB
Python

import graphene
from vbv_lernwelt.course.models import CourseSession, Course
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
from vbv_lernwelt.dashboard.graphql.types.dashboard import CourseStatisticsType, DashboardConfigType, DashboardType
from vbv_lernwelt.iam.permissions import can_view_course_session_group_statistics, can_view_course_session, \
can_view_course_session_progress
class DashboardQuery(graphene.ObjectType):
course_statistics = graphene.Field(CourseStatisticsType, course_id=graphene.ID(required=True))
dashboard_config = graphene.List(DashboardConfigType, required=False)
def resolve_course_statistics(root, info, course_id: str): # noqa
user = info.context.user
course = Course.objects.get(id=course_id)
course_session_ids = set()
for group in CourseSessionGroup.objects.filter(course=course):
if can_view_course_session_group_statistics(user=user, group=group):
course_session_ids.update(group.course_session.all().values_list("id", flat=True))
if not course_session_ids:
return None
return CourseStatisticsType(id=course.id, course_title=course.title, # noqa
course_session_selection_ids=list(course_session_ids)) # noqa
def resolve_dashboard_config(root, info): # noqa
user = info.context.user
course_index = set()
dashboards = []
for group in CourseSessionGroup.objects.all():
if can_view_course_session_group_statistics(user=user, group=group):
course = group.course
course_index.add(course)
dashboards.append(
{
"id": str(course.id),
"name": course.title,
"dashboard_type": DashboardType.STATISTICS_DASHBOARD
}
)
for course_session in CourseSession.objects.exclude(course__in=course_index):
course = course_session.course
if can_view_course_session(user=user, course_session=course_session):
dashboards.append(
{
"id": str(course.id),
"name": course.title,
"dashboard_type": DashboardType.SIMPLE_LIST_DASHBOARD
}
)
if can_view_course_session_progress(user=user, course_session=course_session):
dashboards.append(
{
"id": str(course.id),
"name": course.title,
"dashboard_type": DashboardType.PROGRESS_DASHBOARD
}
)
return dashboards