diff --git a/server/assignments/schema/__init__.py b/server/assignments/schema/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/assignments/schema/inputs.py b/server/assignments/schema/inputs.py new file mode 100644 index 00000000..1804e82c --- /dev/null +++ b/server/assignments/schema/inputs.py @@ -0,0 +1,7 @@ +import graphene +from graphene import InputObjectType + + +class AssignmentInput(InputObjectType): + id = graphene.ID(required=True) + answer = graphene.String(required=True) diff --git a/server/assignments/schema/mutations.py b/server/assignments/schema/mutations.py new file mode 100644 index 00000000..6680e3a0 --- /dev/null +++ b/server/assignments/schema/mutations.py @@ -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() diff --git a/server/assignments/schema/types.py b/server/assignments/schema/types.py new file mode 100644 index 00000000..fff5e0c1 --- /dev/null +++ b/server/assignments/schema/types.py @@ -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) \ No newline at end of file