46 lines
1.7 KiB
Python
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()
|