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

46 lines
1.7 KiB
Python

import graphene
from rest_framework.exceptions import PermissionDenied
from vbv_lernwelt.assignment.graphql.types import (
AssignmentCompletionType,
AssignmentType,
)
from vbv_lernwelt.assignment.models import Assignment, AssignmentCompletion
from vbv_lernwelt.course.graphql.types import resolve_course_page
from vbv_lernwelt.course.models import CourseSession
from vbv_lernwelt.course.permissions import has_course_access, is_course_session_expert
class AssignmentQuery(object):
assignment = graphene.Field(
AssignmentType, id=graphene.ID(), slug=graphene.String()
)
def resolve_assignment(root, info, id=None, slug=None):
return resolve_course_page(Assignment, root, info, id=id, slug=slug)
assignment_completion = graphene.Field(
AssignmentCompletionType,
assignment_id=graphene.ID(required=True),
course_session_id=graphene.ID(required=True),
assignment_user_id=graphene.ID(required=False),
)
def resolve_assignment_completion(
root, info, assignment_id, course_session_id, assignment_user_id=None, **kwargs
):
if assignment_user_id is None:
assignment_user_id = info.context.user.id
if str(assignment_user_id) == str(
info.context.user.id
) or is_course_session_expert(info.context.user, course_session_id):
course_id = CourseSession.objects.get(id=course_session_id).course_id
if has_course_access(info.context.user, course_id):
return AssignmentCompletion.objects.filter(
assignment_user_id=assignment_user_id,
assignment_id=assignment_id,
course_session_id=course_session_id,
).first()
raise PermissionDenied()