Add room update mutation on server

This commit is contained in:
Ramon Wenger 2018-09-21 13:45:51 +02:00
parent 300db36d13
commit dea1d1b253
3 changed files with 17 additions and 10 deletions

View File

@ -9,9 +9,9 @@ class RoomInput(InputObjectType):
appearance = graphene.String() appearance = graphene.String()
class AddRoomArgumen(RoomInput): class AddRoomArgument(RoomInput):
pass pass
class ChangeRoomArgument(RoomInput): class UpdateRoomArgument(RoomInput):
id = graphene.ID(required=True) id = graphene.ID(required=True)

View File

@ -1,8 +1,10 @@
import graphene import graphene
from graphene import relay from graphene import relay
from graphql_relay import from_global_id
from api.utils import get_object from api.utils import get_object
from rooms.inputs import ChangeRoomArgument, AddRoomArgumen from rooms.inputs import UpdateRoomArgument, AddRoomArgument
from rooms.models import Room
from rooms.schema import RoomNode from rooms.schema import RoomNode
from rooms.serializers import RoomSerializer from rooms.serializers import RoomSerializer
from user.models import UserGroup from user.models import UserGroup
@ -17,7 +19,11 @@ class MutateRoom(relay.ClientIDMutation):
room_data = kwargs.get('room') room_data = kwargs.get('room')
user_group = get_object(UserGroup, room_data.get('user_group')) user_group = get_object(UserGroup, room_data.get('user_group'))
room_data['user_group'] = user_group.id room_data['user_group'] = user_group.id
serializer = RoomSerializer(data=room_data) if room_data.get('id') is not None:
room = get_object(Room, room_data['id'])
serializer = RoomSerializer(room, data=room_data)
else:
serializer = RoomSerializer(data=room_data)
if serializer.is_valid(): if serializer.is_valid():
serializer.save() serializer.save()
return cls(room=serializer.instance, errors=None) return cls(room=serializer.instance, errors=None)
@ -27,14 +33,14 @@ class MutateRoom(relay.ClientIDMutation):
class AddRoom(MutateRoom): class AddRoom(MutateRoom):
class Input: class Input:
room = graphene.Argument(AddRoomArgumen) # NB: can't be named AddRoomInput, otherwise graphene complains room = graphene.Argument(AddRoomArgument) # NB: can't be named AddRoomInput, otherwise graphene complains
class ChangeRoom(MutateRoom): class UpdateRoom(MutateRoom):
class Input: class Input:
room = graphene.Argument(ChangeRoomArgument) # NB: can't be named ChangeRoomInput, otherwise graphene complains room = graphene.Argument(UpdateRoomArgument) # NB: can't be named ChangeRoomInput, otherwise graphene complains
class RoomMutations: class RoomMutations:
change_room = ChangeRoom.Field() update_room = UpdateRoom.Field()
add_room = AddRoom.Field() add_room = AddRoom.Field()

View File

@ -4,6 +4,7 @@ from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField from graphene_django.filter import DjangoFilterConnectionField
from graphene_django.rest_framework.mutation import SerializerMutation from graphene_django.rest_framework.mutation import SerializerMutation
from api.utils import get_object
from rooms.models import Room, RoomEntry from rooms.models import Room, RoomEntry
from rooms.serializers import RoomSerializer from rooms.serializers import RoomSerializer
from user.schema import UserNode from user.schema import UserNode
@ -41,7 +42,7 @@ class RoomNode(DjangoObjectType):
class RoomsQuery(object): class RoomsQuery(object):
# room = relay.Node.Field(RoomNode) # room = relay.Node.Field(RoomNode)
room_entry = relay.Node.Field(RoomEntryNode) room_entry = relay.Node.Field(RoomEntryNode)
room = graphene.Field(RoomNode, slug=graphene.String(), id=graphene.Int(), appearance=graphene.String()) room = graphene.Field(RoomNode, slug=graphene.String(), id=graphene.ID(), appearance=graphene.String())
all_rooms = DjangoFilterConnectionField(RoomNode) all_rooms = DjangoFilterConnectionField(RoomNode)
all_room_entries = DjangoFilterConnectionField(RoomEntryNode) all_room_entries = DjangoFilterConnectionField(RoomEntryNode)
@ -51,7 +52,7 @@ class RoomsQuery(object):
room_id = kwargs.get('id') room_id = kwargs.get('id')
if room_id is not None: if room_id is not None:
return Room.objects.get(pk=room_id) return get_object(Room, room_id)
if slug is not None: if slug is not None:
return Room.objects.get(slug=slug) return Room.objects.get(slug=slug)
return None return None