diff --git a/server/books/schema/nodes/topic.py b/server/books/schema/nodes/topic.py index 41f7dcd6..385ee794 100644 --- a/server/books/schema/nodes/topic.py +++ b/server/books/schema/nodes/topic.py @@ -6,6 +6,10 @@ from graphene_django.filter import DjangoFilterConnectionField from books.models import Topic, Module from books.schema.nodes import ModuleNode +class NotFoundFailure: + reason = 'Not Found' + + NOT_FOUND = { 'reason': 'Not Found'} class NotFound(graphene.ObjectType): diff --git a/server/books/schema/queries.py b/server/books/schema/queries.py index 53bf3664..5ccbf872 100644 --- a/server/books/schema/queries.py +++ b/server/books/schema/queries.py @@ -5,7 +5,8 @@ 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, NOT_FOUND, TopicNode, SnapshotNode, TopicOr404Node +from .nodes import ContentBlockNode, ChapterNode, ModuleNode, NOT_FOUND, NotFoundFailure, TopicNode, SnapshotNode, \ + TopicOr404Node from ..models import Book, Topic, Module, Chapter, Snapshot logger = get_logger(__name__) @@ -66,5 +67,5 @@ class BookQuery(object): try: return Topic.objects.get(slug=slug) except Topic.DoesNotExist: - return NOT_FOUND + return NotFoundFailure return None diff --git a/server/schema.graphql b/server/schema.graphql index 7a30217b..a42045bb 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -702,6 +702,10 @@ interface Node { id: ID! } +type NotFound { + reason: String +} + type NoteNode implements Node { id: ID! text: String! @@ -852,7 +856,7 @@ type Query { assignment(id: ID!): AssignmentNode assignments: [AssignmentNode] node(id: ID!): Node - topic(slug: String): TopicNode + topic(slug: String): TopicOr404Node module(slug: String, id: ID): ModuleNode chapter(id: ID!): ChapterNode contentBlock(id: ID!): ContentBlockNode @@ -1127,6 +1131,8 @@ type TopicNode implements Node { modules(offset: Int, before: String, after: String, first: Int, last: Int, slug: String, slug_Icontains: String, slug_In: [String], title: String, title_Icontains: String, title_In: [String]): ModuleNodeConnection } +union TopicOr404Node = TopicNode | NotFound + scalar UUID input UpdateAnswerArgument {