diff --git a/server/rooms/inputs.py b/server/rooms/inputs.py index 9c223090..1fdd329d 100644 --- a/server/rooms/inputs.py +++ b/server/rooms/inputs.py @@ -9,9 +9,9 @@ class RoomInput(InputObjectType): appearance = graphene.String() -class AddRoomArgumen(RoomInput): +class AddRoomArgument(RoomInput): pass -class ChangeRoomArgument(RoomInput): +class UpdateRoomArgument(RoomInput): id = graphene.ID(required=True) diff --git a/server/rooms/mutations.py b/server/rooms/mutations.py index b659d9a1..87c9cf25 100644 --- a/server/rooms/mutations.py +++ b/server/rooms/mutations.py @@ -1,8 +1,10 @@ import graphene from graphene import relay +from graphql_relay import from_global_id 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.serializers import RoomSerializer from user.models import UserGroup @@ -17,7 +19,11 @@ class MutateRoom(relay.ClientIDMutation): room_data = kwargs.get('room') user_group = get_object(UserGroup, room_data.get('user_group')) 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(): serializer.save() return cls(room=serializer.instance, errors=None) @@ -27,14 +33,14 @@ class MutateRoom(relay.ClientIDMutation): class AddRoom(MutateRoom): 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: - 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: - change_room = ChangeRoom.Field() + update_room = UpdateRoom.Field() add_room = AddRoom.Field() diff --git a/server/rooms/schema.py b/server/rooms/schema.py index 1e078539..2546ebc4 100644 --- a/server/rooms/schema.py +++ b/server/rooms/schema.py @@ -4,6 +4,7 @@ from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField from graphene_django.rest_framework.mutation import SerializerMutation +from api.utils import get_object from rooms.models import Room, RoomEntry from rooms.serializers import RoomSerializer from user.schema import UserNode @@ -41,7 +42,7 @@ class RoomNode(DjangoObjectType): class RoomsQuery(object): # room = relay.Node.Field(RoomNode) 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_room_entries = DjangoFilterConnectionField(RoomEntryNode) @@ -51,7 +52,7 @@ class RoomsQuery(object): room_id = kwargs.get('id') if room_id is not None: - return Room.objects.get(pk=room_id) + return get_object(Room, room_id) if slug is not None: return Room.objects.get(slug=slug) return None