skillbox/server/rooms/schema.py

56 lines
1.3 KiB
Python

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
class RoomEntryNode(DjangoObjectType):
pk = graphene.Int()
author = UserNode()
class Meta:
model = RoomEntry
filter_fields = ['slug']
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
return self.id
class RoomNode(DjangoObjectType):
pk = graphene.Int()
entry_count = graphene.Int()
class Meta:
model = Room
filter_fields = ['slug', 'appearance']
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
return self.id
def resolve_entry_count(self, *args, **kwargs):
return self.room_entries.count()
class RoomsQuery(object):
room = relay.Node.Field(RoomNode)
room_entry = relay.Node.Field(RoomEntryNode)
all_rooms = DjangoFilterConnectionField(RoomNode)
all_room_entries = DjangoFilterConnectionField(RoomEntryNode)
class RoomMutation(SerializerMutation):
class Meta:
serializer_class = RoomSerializer
class RoomMutations:
room = RoomMutation.Field()