skillbox/server/books/schema/queries.py

121 lines
3.6 KiB
Python

import graphene
from graphene import relay
from graphene_django.filter import DjangoFilterConnectionField
from api.utils import get_object
from core.logger import get_logger
from .connections import TopicConnection, ModuleConnection
from .nodes import ContentBlockNode, ChapterNode, ModuleNode, NotFoundFailure, SnapshotNode, \
TopicOr404Node
from .nodes.module_category import ModuleCategoryNode
from .nodes.module_category_type import ModuleCategoryTypeNode
from ..models import Book, Topic, Module, Chapter, Snapshot, ModuleCategory, ModuleType
logger = get_logger(__name__)
class BookQuery(object):
node = relay.Node.Field()
topic = graphene.Field(TopicOr404Node, slug=graphene.String())
module = graphene.Field(
ModuleNode, slug=graphene.String(), id=graphene.ID())
chapter = relay.Node.Field(ChapterNode)
content_block = relay.Node.Field(ContentBlockNode)
snapshot = relay.Node.Field(SnapshotNode)
topics = relay.ConnectionField(TopicConnection)
modules = relay.ConnectionField(ModuleConnection)
chapters = DjangoFilterConnectionField(ChapterNode)
module_category = graphene.Field(ModuleCategoryNode, id=graphene.ID(required=True))
module_categories = graphene.List(ModuleCategoryNode)
module_category_type= graphene.Field(ModuleCategoryTypeNode, id=graphene.ID(required=True))
module_category_types = graphene.List(ModuleCategoryTypeNode)
def resolve_books(self, *args, **kwargs):
return Book.objects.filter(**kwargs).live()
def resolve_topics(self, *args, **kwargs):
return Topic.objects.live()
def resolve_modules(self, *args, **kwargs):
return Module.objects.filter(**kwargs).live()
def resolve_chapters(self, *args, **kwargs):
return Chapter.objects.filter(**kwargs).live()
def resolve_snapshot(self, info, **kwargs):
id = kwargs.get('id')
snapshot = get_object(Snapshot, id)
return snapshot
def resolve_module(self, info, **kwargs):
slug = kwargs.get('slug')
id = kwargs.get('id')
module = None
try:
if id is not None:
module = get_object(Module, id)
elif slug is not None:
module = Module.objects.get(slug=slug)
return module
except Module.DoesNotExist:
return None
def resolve_topic(self, info, **kwargs):
slug = kwargs.get('slug')
id = kwargs.get('id')
if id is not None:
return get_object(Topic, id)
if slug is not None:
try:
return Topic.objects.get(slug=slug)
except Topic.DoesNotExist:
return NotFoundFailure
return None
def resolve_module_category(self, info, **kwargs):
id = kwargs.get('id')
try:
if id is not None:
module_category = get_object(Module, id)
return module_category
except Module.DoesNotExist:
return None
def resolve_module_categories(self, *args, **kwargs):
return ModuleCategory.objects.filter(**kwargs)
def resolve_module_category_type(self, info, **kwargs):
id = kwargs.get('id')
try:
if id is not None:
module_category_type = get_object(Module, id)
return module_category_type
except Module.DoesNotExist:
return None
def resolve_module_category_types(self, *args, **kwargs):
return ModuleType.objects.filter(**kwargs)
class ModuleTypeQuery(graphene.ObjectType):
node = relay.Node.Field()
name = graphene.String()
id = graphene.ID()