Add assignment mutation on server side

This commit is contained in:
Ramon Wenger 2018-10-01 13:44:29 +02:00
parent 23176088f4
commit 107b5735e9
4 changed files with 58 additions and 0 deletions

View File

View File

@ -0,0 +1,7 @@
import graphene
from graphene import InputObjectType
class AssignmentInput(InputObjectType):
id = graphene.ID(required=True)
answer = graphene.String(required=True)

View File

@ -0,0 +1,28 @@
from graphene import relay
import graphene
from api.utils import get_object
from assignments.models import Assignment
from assignments.schema.types import AssignmentNode
from .inputs import AssignmentInput
class UpdateAssignment(relay.ClientIDMutation):
class Input:
assignment = graphene.Argument(AssignmentInput)
updated_assignment = graphene.Field(AssignmentNode)
errors = graphene.List(graphene.String)
@classmethod
def mutate_and_get_payload(cls, root, info, **kwargs):
assignment_data = kwargs.get('assignment')
assignment = get_object(Assignment, assignment_data.get('id'))
(submission, created) = assignment.submissions.get_or_create(student=info.context.user)
submission.text = assignment_data.get('answer')
submission.save()
return cls(updated_assignment=assignment, errors=None)
class AssignmentMutations(object):
update_assignment = UpdateAssignment.Field()

View File

@ -0,0 +1,23 @@
import graphene
from graphene import relay
from graphene_django import DjangoObjectType
from assignments.models import Assignment, StudentSubmission
class StudentSubmissionNode(DjangoObjectType):
class Meta:
model = StudentSubmission
interfaces = (relay.Node,)
class AssignmentNode(DjangoObjectType):
submission = graphene.Field(StudentSubmissionNode)
submissions = graphene.List(StudentSubmissionNode)
class Meta:
model = Assignment
interfaces = (relay.Node,)
def resolve_submission(self, info, **kwargs):
return self.submissions.get(student=info.context.user)