From f5e163c3cde22a97c3ff9ed7e329cf508bd3c2c7 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Mon, 1 Oct 2018 13:08:20 +0200 Subject: [PATCH] Clean up module query --- client/src/graphql/gql/moduleDetailsQuery.gql | 60 +++++++++---------- client/src/pages/module.vue | 11 ++-- server/filteredbook/schema.py | 13 +++- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/client/src/graphql/gql/moduleDetailsQuery.gql b/client/src/graphql/gql/moduleDetailsQuery.gql index ec133626..c5c85cec 100644 --- a/client/src/graphql/gql/moduleDetailsQuery.gql +++ b/client/src/graphql/gql/moduleDetailsQuery.gql @@ -1,41 +1,37 @@ #import "./fragments/contentBlockParts.gql" query ModulesQuery($slug: String!) { - modules(slug: $slug) { - edges { - node { - id - slug - title - metaTitle - teaser - intro - objectiveGroups { - edges { - node { - id - title - objectiveSet { - edges { - node { - id - text - } - } + module(slug: $slug) { + id + slug + title + metaTitle + teaser + intro + objectiveGroups { + edges { + node { + id + title + objectiveSet { + edges { + node { + id + text } } } } - chapters { - edges { - node { - id - title - contentBlocks { - edges { - node { - ...ContentBlockParts - } - } + } + } + chapters { + edges { + node { + id + title + contentBlocks { + edges { + node { + ...ContentBlockParts } } } diff --git a/client/src/pages/module.vue b/client/src/pages/module.vue index 45ecb83a..bbac8b61 100644 --- a/client/src/pages/module.vue +++ b/client/src/pages/module.vue @@ -20,18 +20,15 @@ }, apollo: { - moduleQuery() { + module() { return { query: MODULE_DETAILS_QUERY, variables: { slug: store.state.moduleSlug }, - manual: true, - result({data, loading, networkStatus}) { - if (!loading) { - const cleanedData = this.$getRidOfEdges(data); - this.module = cleanedData.modules[0] || {}; - } + update(data) { + const cleanedData = this.$getRidOfEdges(data); + return cleanedData.module || {}; } } } diff --git a/server/filteredbook/schema.py b/server/filteredbook/schema.py index a43f9028..23475ffb 100644 --- a/server/filteredbook/schema.py +++ b/server/filteredbook/schema.py @@ -6,6 +6,7 @@ from graphene import relay from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField +from api.utils import get_object from book.models import Book, Topic, Module, Chapter, ContentBlock from book.schema.queries import BookNode, TopicNode, ModuleNode, ContentBlockNode @@ -49,7 +50,7 @@ class VisibilityNode(DjangoObjectType): class BookQuery(object): book = relay.Node.Field(BookNode) topic = relay.Node.Field(TopicNode) - module = relay.Node.Field(ModuleNode) + module = graphene.Field(ModuleNode, slug=graphene.String()) chapter = relay.Node.Field(FilteredChapterNode) content_block = relay.Node.Field(ContentBlockNode) @@ -69,3 +70,13 @@ class BookQuery(object): def resolve_chapters(self, *args, **kwargs): return Chapter.objects.filter(**kwargs).live() + + def resolve_module(self, info, **kwargs): + slug = kwargs.get('slug') + id = kwargs.get('id') + + if id is not None: + return get_object(Module, id) + if slug is not None: + return Module.objects.get(slug=slug) + return None