Add assignment mutation on server side
This commit is contained in:
parent
23176088f4
commit
107b5735e9
|
|
@ -0,0 +1,7 @@
|
|||
import graphene
|
||||
from graphene import InputObjectType
|
||||
|
||||
|
||||
class AssignmentInput(InputObjectType):
|
||||
id = graphene.ID(required=True)
|
||||
answer = graphene.String(required=True)
|
||||
|
|
@ -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()
|
||||
|
|
@ -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)
|
||||
Loading…
Reference in New Issue