diff --git a/server/api/graphene_wagtail.py b/server/api/graphene_wagtail.py index f4f1de82..26a82c6f 100644 --- a/server/api/graphene_wagtail.py +++ b/server/api/graphene_wagtail.py @@ -3,6 +3,7 @@ from graphene.types import Scalar from graphene_django.converter import convert_django_field +from graphql_relay import to_global_id from wagtail.core.fields import StreamField from wagtail.images.models import Image @@ -29,12 +30,12 @@ class GenericStreamFieldType(Scalar): _value = d['value'] assignment = Assignment.objects.get(pk=_value['assignment_id']) value = { - 'title' : assignment.title, - 'assignment': assignment.assignment + 'title': assignment.title, + 'assignment': assignment.assignment, + 'id': to_global_id('AssignmentNode', assignment.pk) } d['value'] = value - # value = dict(d['value']) # if 'document' in value: # value['document'] = Document.objects.get(id=value['document']).file.url diff --git a/server/api/schema.py b/server/api/schema.py index 87fd323a..06fd3195 100644 --- a/server/api/schema.py +++ b/server/api/schema.py @@ -5,6 +5,8 @@ from graphene_django.debug import DjangoDebug # noinspection PyUnresolvedReferences from api import graphene_wagtail # Keep this import exactly here, it's necessary for StreamField conversion +from assignments.schema.mutations import AssignmentMutations +from assignments.schema.queries import AssignmentsQuery from book.schema.mutations import BookMutations from filteredbook.schema import BookQuery @@ -14,14 +16,14 @@ from rooms.schema import RoomsQuery from user.schema import UsersQuery -class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, graphene.ObjectType): +class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, AssignmentsQuery, graphene.ObjectType): node = relay.Node.Field() if settings.DEBUG: debug = graphene.Field(DjangoDebug, name='__debug') -class Mutation(BookMutations, RoomMutations, graphene.ObjectType): +class Mutation(BookMutations, RoomMutations, AssignmentMutations, graphene.ObjectType): if settings.DEBUG: debug = graphene.Field(DjangoDebug, name='__debug') diff --git a/server/assignments/migrations/0002_auto_20181001_1254.py b/server/assignments/migrations/0002_auto_20181001_1254.py new file mode 100644 index 00000000..6cd08f5a --- /dev/null +++ b/server/assignments/migrations/0002_auto_20181001_1254.py @@ -0,0 +1,24 @@ +# Generated by Django 2.0.6 on 2018-10-01 12:54 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('assignments', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='studentsubmission', + name='final', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='studentsubmission', + name='assignment', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='assignments.Assignment'), + ), + ] diff --git a/server/assignments/models.py b/server/assignments/models.py index ce4bf10c..3534b4b4 100644 --- a/server/assignments/models.py +++ b/server/assignments/models.py @@ -23,3 +23,4 @@ class StudentSubmission(TimeStampedModel): document = models.FilePathField(null=True) assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE, related_name='submissions') student = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) + final = models.BooleanField(default=False) diff --git a/server/assignments/schema/queries.py b/server/assignments/schema/queries.py new file mode 100644 index 00000000..c410d657 --- /dev/null +++ b/server/assignments/schema/queries.py @@ -0,0 +1,10 @@ +from graphene import relay +import graphene +from graphene_django.filter import DjangoFilterConnectionField + +from assignments.schema.types import AssignmentNode + + +class AssignmentsQuery(object): + assignment = relay.Node.Field(AssignmentNode) + assignments = DjangoFilterConnectionField(AssignmentNode) \ No newline at end of file diff --git a/server/assignments/schema/types.py b/server/assignments/schema/types.py index fff5e0c1..1d85978c 100644 --- a/server/assignments/schema/types.py +++ b/server/assignments/schema/types.py @@ -17,7 +17,11 @@ class AssignmentNode(DjangoObjectType): class Meta: model = Assignment + filter_fields = [] interfaces = (relay.Node,) def resolve_submission(self, info, **kwargs): - return self.submissions.get(student=info.context.user) \ No newline at end of file + return self.submissions.get(student=info.context.user) + + def resolve_submissions(self, info, **kwargs): + return self.submissions.all() \ No newline at end of file diff --git a/server/book/migrations/0005_auto_20181001_1254.py b/server/book/migrations/0005_auto_20181001_1254.py new file mode 100644 index 00000000..12f4321a --- /dev/null +++ b/server/book/migrations/0005_auto_20181001_1254.py @@ -0,0 +1,21 @@ +# Generated by Django 2.0.6 on 2018-10-01 12:54 + +from django.db import migrations +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.images.blocks + + +class Migration(migrations.Migration): + + dependencies = [ + ('book', '0004_auto_20180927_0945'), + ] + + operations = [ + migrations.AlterField( + model_name='contentblock', + name='contents', + field=wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())])), ('basic_knowledge', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('url', wagtail.core.blocks.URLBlock())])), ('assignment', wagtail.core.blocks.StructBlock([('assignment_id', wagtail.core.blocks.IntegerBlock())])), ('image_block', wagtail.images.blocks.ImageChooserBlock()), ('image_url_block', wagtail.core.blocks.StructBlock([('title', wagtail.core.blocks.RichTextBlock()), ('url', wagtail.core.blocks.URLBlock())])), ('link_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.TextBlock()), ('url', wagtail.core.blocks.URLBlock())])), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick')), ('video_block', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())])), ('document_block', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())]))], blank=True, null=True), + ), + ]