import graphene from rest_framework.exceptions import PermissionDenied from vbv_lernwelt.assignment.graphql.types import ( AssignmentCompletionObjectType, AssignmentObjectType, ) 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( AssignmentObjectType, 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( AssignmentCompletionObjectType, assignment_id=graphene.ID(required=True), course_session_id=graphene.ID(required=True), learning_content_page_id=graphene.ID(required=False), assignment_user_id=graphene.UUID(required=False), ) def resolve_assignment_completion( root, info, assignment_id, course_session_id, learning_content_page_id=None, 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): if learning_content_page_id is None: learning_content_page = Assignment.objects.get( id=assignment_id ).learningcontentassignment_set.first() if learning_content_page: learning_content_page_id = learning_content_page.id return AssignmentCompletion.objects.filter( assignment_user_id=assignment_user_id, assignment_id=assignment_id, learning_content_page_id=learning_content_page_id, course_session_id=course_session_id, ).first() raise PermissionDenied()