example mutate hidden/visibility userGroup <-> contentBlock

This commit is contained in:
Daniel Egger 2018-09-13 12:05:22 +02:00
parent 2ad89ce6ef
commit 4a964b3e81
4 changed files with 56 additions and 16 deletions

View File

@ -0,0 +1,22 @@
mutation MutateContentBlock($input: MutateContentBlockInput!) {
mutateContentBlock(input: $input) {
contentBlock {
id
title
slug
}
errors
}
}
# input
#{"input": {
# "id": "Q29udGVudEJsb2NrTm9kZToyMQ==",
# "visibility": [{
# "userGroupId": "VXNlckdyb3VwTm9kZToy",
# "hidden": false
# }]
#}}

6
package-lock.json generated
View File

@ -41,9 +41,9 @@
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
}, },
"unfetch": { "unfetch": {
"version": "3.0.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.0.0.tgz", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.1.tgz",
"integrity": "sha1-jR4FE6Ts0OX/LUGmund3Gq6LZII=" "integrity": "sha512-syDl3htvM56w0HC0PTVA5jEEknOCJ3dWgWGDuaEtQUno8ORDCfZQbm12RzfWO3AC3YhWDoP61dlgmo8Z05Y97g=="
} }
} }
} }

View File

@ -1,5 +1,5 @@
from graphene import InputObjectType
import graphene import graphene
from graphene import InputObjectType
class InputTypes(graphene.Enum): class InputTypes(graphene.Enum):
@ -28,3 +28,8 @@ class ContentBlockInput(InputObjectType):
title = graphene.String(required=True) title = graphene.String(required=True)
type = graphene.String() type = graphene.String()
contents = graphene.List(ContentElementInput) contents = graphene.List(ContentElementInput)
class UserGroupContentBlockVisibility(InputObjectType):
user_group_id = graphene.ID(required=True)
hidden = graphene.Boolean(required=True)

View File

@ -1,13 +1,13 @@
import json import json
import bleach
import bleach
import graphene import graphene
from graphene import relay
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from graphene import relay
from api.utils import get_object, get_errors from api.utils import get_object, get_errors
from book.models import ContentBlock, Chapter from book.models import ContentBlock, Chapter, UserGroup
from book.schema.inputs import ContentBlockInput from book.schema.inputs import ContentBlockInput, UserGroupContentBlockVisibility
from book.schema.queries import ContentBlockNode from book.schema.queries import ContentBlockNode
@ -55,10 +55,11 @@ def handle_content_blocks(content_data):
class MutateContentBlock(relay.ClientIDMutation): class MutateContentBlock(relay.ClientIDMutation):
class Input: class Input:
id = graphene.ID() id = graphene.ID(required=True)
type = graphene.String() type = graphene.String()
title = graphene.String() title = graphene.String()
contents = graphene.String() contents = graphene.String()
visibility = graphene.List(UserGroupContentBlockVisibility)
errors = graphene.List(graphene.String) errors = graphene.List(graphene.String)
content_block = graphene.Field(ContentBlockNode) content_block = graphene.Field(ContentBlockNode)
@ -67,19 +68,31 @@ class MutateContentBlock(relay.ClientIDMutation):
def mutate_and_get_payload(cls, *args, **kwargs): def mutate_and_get_payload(cls, *args, **kwargs):
try: try:
id_param = kwargs['id'] id_param = kwargs['id']
type_param = kwargs['type'] type_param = kwargs.get('type')
title = kwargs['title'] title = kwargs.get('title')
contents_data = kwargs['contents'] contents_data = kwargs.get('contents')
visibility_list = kwargs.get('visibility', [])
new_content_block = ContentBlock(type=type_param, title=title, contents=contents_data) #new_content_block = ContentBlock(type=type_param, title=title, contents=contents_data)
content_block = get_object(ContentBlock, id_param) content_block = get_object(ContentBlock, id_param)
content_block.add_sibling(instance=new_content_block, pos='right')
for v in visibility_list:
user_group = get_object(UserGroup, v.user_group_id)
if v.hidden:
content_block.hidden_for.add(user_group)
else:
content_block.hidden_for.remove(user_group)
content_block.save()
#content_block.add_sibling(instance=new_content_block, pos='right')
# ContentBlock.objects.get() # ContentBlock.objects.get()
# cb.add_sibling() # cb.add_sibling()
new_content_block.save() #new_content_block.saveI()
# image_instance = get_object(Image, kwargs['id']) # image_instance = get_object(Image, kwargs['id'])
# if image_instance: # if image_instance:
@ -92,7 +105,7 @@ class MutateContentBlock(relay.ClientIDMutation):
# tag_slugs = [t for t in tag_slugs if t not in [e.slug for e in tags]] # tag_slugs = [t for t in tag_slugs if t not in [e.slug for e in tags]]
# updated_image.tags.set(*(tags + tag_slugs)) # updated_image.tags.set(*(tags + tag_slugs))
return cls(content_block=new_content_block) return cls(content_block=content_block)
except ValidationError as e: except ValidationError as e:
errors = get_errors(e) errors = get_errors(e)