65 lines
2.3 KiB
Python
65 lines
2.3 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
|
|
from vbv_lernwelt.iam.permissions import can_view_course_session_group_statistics, can_view_course_session
|
|
|
|
|
|
class DashboardQuery(graphene.ObjectType):
|
|
course_statistics = graphene.Field(CourseStatisticsType, course_id=graphene.ID(required=True))
|
|
|
|
dashboard_config = graphene.List(
|
|
DashboardConfigType
|
|
)
|
|
|
|
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(course_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),
|
|
"title": course.title,
|
|
"dashboard_type": "StatisticsDashboard",
|
|
}
|
|
)
|
|
|
|
for course_session in CourseSession.objects.exclude(course__in=course_index):
|
|
if can_view_course_session(user=user, course_session=course_session):
|
|
course = course_session.course
|
|
dashboards.append(
|
|
{
|
|
"id": str(course.id),
|
|
"title": course.title,
|
|
"dashboard_type": "SimpleDashboard",
|
|
}
|
|
)
|
|
|
|
return dashboards
|