From fe59a65e877a94eb2edd5decfdd3c5d41d891f4c Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Mon, 17 Sep 2018 11:35:49 +0200 Subject: [PATCH] Add room mutation --- Pipfile | 1 + Pipfile.lock | 4 ++-- client/src/graphql/gql/mutations/addRoom.gql | 25 ++++++++++++++++++++ server/api/schema.py | 4 ++-- server/rooms/schema.py | 19 ++++++++------- server/rooms/serializers.py | 10 ++++++++ 6 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 client/src/graphql/gql/mutations/addRoom.gql create mode 100644 server/rooms/serializers.py diff --git a/Pipfile b/Pipfile index ed38fb71..706d2719 100644 --- a/Pipfile +++ b/Pipfile @@ -23,6 +23,7 @@ raven = "==6.9.0" django-extensions = "==1.9.8" graphene-django = "==2.2.0" django-filter = "==2.0.0" +djangorestframework = "==3.8.2" pillow = "==5.0.0" wagtail = "==2.2.2" django-cors-headers = "==2.2.0" diff --git a/Pipfile.lock b/Pipfile.lock index c02d842d..94b952f3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "22744fc51ea36160ffcfa7253af7639a5290f7fd6f0a28a07752bd2904e8b39f" + "sha256": "2341eacc0bfdcc8c231c5ebf696c89360052a264240118f3b509c927aeaf611b" }, "pipfile-spec": 6, "requires": { @@ -168,7 +168,7 @@ "sha256:b6714c3e4b0f8d524f193c91ecf5f5450092c2145439ac2769711f7eba89a9d9", "sha256:c375e4f95a3a64fccac412e36fb42ba36881e52313ec021ef410b40f67cddca4" ], - "markers": "python_version >= '2.7' and python_version != '3.3.*' and python_version != '3.2.*' and python_version != '3.1.*' and python_version != '3.0.*'", + "index": "pypi", "version": "==3.8.2" }, "docutils": { diff --git a/client/src/graphql/gql/mutations/addRoom.gql b/client/src/graphql/gql/mutations/addRoom.gql new file mode 100644 index 00000000..e6711c67 --- /dev/null +++ b/client/src/graphql/gql/mutations/addRoom.gql @@ -0,0 +1,25 @@ +mutation AddRoomMutation($input: RoomMutationInput!) { + room(input: $input) { + id, + title, + slug, + title, + description, + appearance, + clientMutationId, + errors { + field + messages + } + } +} + + + +#{ +# "input": { +# "title": "Neuer Raum", +# "description": "So eine Beschreibung", +# "userGroup": 4 +#} +#} diff --git a/server/api/schema.py b/server/api/schema.py index 0575a845..fa6fe9a5 100644 --- a/server/api/schema.py +++ b/server/api/schema.py @@ -9,7 +9,7 @@ from api import graphene_wagtail from book.schema.mutations import BookMutations from filteredbook.schema import BookQuery from objectives.schema import ObjectivesQuery -from rooms.schema import RoomsQuery +from rooms.schema import RoomsQuery, RoomMutations from user.schema import UsersQuery @@ -20,7 +20,7 @@ class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, graphene.ObjectT debug = graphene.Field(DjangoDebug, name='__debug') -class Mutation(graphene.ObjectType, BookMutations): +class Mutation(BookMutations, RoomMutations, graphene.ObjectType): if settings.DEBUG: debug = graphene.Field(DjangoDebug, name='__debug') diff --git a/server/rooms/schema.py b/server/rooms/schema.py index 317d278e..dc4f37ba 100644 --- a/server/rooms/schema.py +++ b/server/rooms/schema.py @@ -2,8 +2,10 @@ import graphene from graphene import relay from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField +from graphene_django.rest_framework.mutation import SerializerMutation from rooms.models import Room, RoomEntry +from rooms.serializers import RoomSerializer from user.schema import UserNode @@ -37,18 +39,17 @@ class RoomNode(DjangoObjectType): class RoomsQuery(object): - room = graphene.Field(RoomNode, slug=graphene.String(), id=graphene.Int(), appearance=graphene.String()) + room = relay.Node.Field(RoomNode) room_entry = relay.Node.Field(RoomEntryNode) all_rooms = DjangoFilterConnectionField(RoomNode) all_room_entries = DjangoFilterConnectionField(RoomEntryNode) - def resolve_room(self, info, **kwargs): - slug = kwargs.get('slug') - room_id = kwargs.get('id') - if room_id is not None: - return Room.objects.get(pk=room_id) - if slug is not None: - return Room.objects.get(slug=slug) - return None +class RoomMutation(SerializerMutation): + class Meta: + serializer_class = RoomSerializer + + +class RoomMutations: + room = RoomMutation.Field() diff --git a/server/rooms/serializers.py b/server/rooms/serializers.py new file mode 100644 index 00000000..334e5ea0 --- /dev/null +++ b/server/rooms/serializers.py @@ -0,0 +1,10 @@ +from rest_framework import serializers + +from rooms.models import Room + + +class RoomSerializer(serializers.ModelSerializer): + class Meta: + model = Room + fields = ('id', 'title', 'description', 'slug', 'user_group', 'appearance', ) + read_only_fields = ('id', 'slug', )