From af4f19720b54945b2f49d8b4324a6b203a6aece5 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Mon, 6 Feb 2023 14:30:41 +0100 Subject: [PATCH] Add path property to contentblock --- server/books/models/contentblock.py | 3 ++- server/books/schema/nodes/content.py | 9 ++++++++- server/books/schema/queries.py | 3 ++- server/schema.graphql | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/server/books/models/contentblock.py b/server/books/models/contentblock.py index ec5b3d95..042e26e5 100644 --- a/server/books/models/contentblock.py +++ b/server/books/models/contentblock.py @@ -36,11 +36,12 @@ from core.wagtail_utils import StrictHierarchyPage from notes.models import ContentBlockBookmark from surveys.models import Survey from users.models import SchoolClass, User +from core.mixins import GraphqlNodeMixin logger = logging.getLogger(__name__) -class ContentBlock(StrictHierarchyPage): +class ContentBlock(StrictHierarchyPage, GraphqlNodeMixin): class Meta: verbose_name = "Inhaltsblock" verbose_name_plural = "Inhaltsblöcke" diff --git a/server/books/schema/nodes/content.py b/server/books/schema/nodes/content.py index 25ac7ab2..01cfec2a 100644 --- a/server/books/schema/nodes/content.py +++ b/server/books/schema/nodes/content.py @@ -43,6 +43,7 @@ class ContentBlockNode(DjangoObjectType, HiddenAndVisibleForMixin): bookmarks = graphene.List(ContentBlockBookmarkNode) original_creator = graphene.Field('users.schema.PublicUserNode') instrument_category = graphene.Field(InstrumentCategoryNode) + path = graphene.String() class Meta: model = ContentBlock @@ -99,11 +100,17 @@ class ContentBlockNode(DjangoObjectType, HiddenAndVisibleForMixin): return category return None + @staticmethod + def resolve_path(root: ContentBlock, info, **kwargs): + module = root.get_parent().get_parent() + return f'module/{module.slug}#{root.graphql_id}' + def process_module_room_slug_block(content): if content['type'] == 'module_room_slug': try: - module_room_slug = ModuleRoomSlug.objects.get(title=content['value']['title']) + module_room_slug = ModuleRoomSlug.objects.get( + title=content['value']['title']) content['value'] = { 'title': content['value']['title'], 'slug': module_room_slug.slug diff --git a/server/books/schema/queries.py b/server/books/schema/queries.py index 33267d8c..3f4f926d 100644 --- a/server/books/schema/queries.py +++ b/server/books/schema/queries.py @@ -15,7 +15,8 @@ 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()) + 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) diff --git a/server/schema.graphql b/server/schema.graphql index 0cb896a5..76da2011 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -300,6 +300,7 @@ type ContentBlockNode implements Node & ContentBlockInterface { bookmarks: [ContentBlockBookmarkNode] originalCreator: PublicUserNode instrumentCategory: InstrumentCategoryNode + path: String } type ContentBlockNodeConnection { @@ -512,6 +513,7 @@ enum InputTypes { document_block content_list_item subtitle + readonly } type InstrumentBookmarkNode implements Node {