90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
from graphene import relay
|
|
from graphene_django import DjangoObjectType
|
|
from graphene_django.filter import DjangoFilterConnectionField
|
|
import graphene
|
|
|
|
from .models import Book, Topic, Module
|
|
|
|
|
|
class ModuleNode(DjangoObjectType):
|
|
pk = graphene.Int()
|
|
hero_image = graphene.String()
|
|
|
|
class Meta:
|
|
model = Module
|
|
only_fields = [
|
|
'slug', 'title', 'meta_title', 'teaser', 'description',
|
|
]
|
|
filter_fields = {
|
|
'slug': ['exact', 'icontains', 'in'],
|
|
'title': ['exact', 'icontains', 'in'],
|
|
}
|
|
interfaces = (relay.Node,)
|
|
|
|
def resolve_pk(self, *args, **kwargs):
|
|
return self.id
|
|
|
|
def resolve_hero_image(self, *args, **kwargs):
|
|
if self.hero_image:
|
|
return self.hero_image.file.url
|
|
|
|
|
|
class TopicNode(DjangoObjectType):
|
|
pk = graphene.Int()
|
|
modules = DjangoFilterConnectionField(ModuleNode)
|
|
|
|
class Meta:
|
|
model = Topic
|
|
only_fields = [
|
|
'slug', 'title', 'meta_title', 'teaser', 'description',
|
|
]
|
|
filter_fields = {
|
|
'slug': ['exact', 'icontains', 'in'],
|
|
'title': ['exact', 'icontains', 'in'],
|
|
}
|
|
interfaces = (relay.Node,)
|
|
|
|
def resolve_pk(self, *args, **kwargs):
|
|
return self.id
|
|
|
|
def resolve_modules(self, *args, **kwargs):
|
|
return Module.get_topic_modules(self)
|
|
|
|
|
|
class BookNode(DjangoObjectType):
|
|
pk = graphene.Int()
|
|
topics = DjangoFilterConnectionField(TopicNode)
|
|
|
|
class Meta:
|
|
model = Book
|
|
only_fields = [
|
|
'slug', 'title',
|
|
]
|
|
filter_fields = {
|
|
'slug': ['exact', 'icontains', 'in'],
|
|
'title': ['exact', 'icontains', 'in'],
|
|
}
|
|
interfaces = (relay.Node,)
|
|
|
|
def resolve_pk(self, *args, **kwargs):
|
|
return self.id
|
|
|
|
def resolve_topics(self, *args, **kwargs):
|
|
return Topic.get_book_topics(self)
|
|
|
|
|
|
class ModulesQuery(object):
|
|
books = DjangoFilterConnectionField(BookNode)
|
|
topics = DjangoFilterConnectionField(TopicNode)
|
|
modules = DjangoFilterConnectionField(ModuleNode)
|
|
|
|
def resolve_books(self, *args, **kwargs):
|
|
return Book.objects.filter(**kwargs).live()
|
|
|
|
def resolve_topics(self, *args, **kwargs):
|
|
return Topic.objects.filter(**kwargs).live()
|
|
|
|
def resolve_modules(self, *args, **kwargs):
|
|
return Module.objects.filter(**kwargs).live()
|
|
|