import graphene from graphene import relay from api.utils import get_object from books.models import Chapter from books.schema.inputs import UserGroupBlockVisibility from books.schema.nodes import ChapterNode from users.models import SchoolClass class UpdateChapterVisibility(relay.ClientIDMutation): class Input: id = graphene.ID(required=True) visibility = graphene.List(UserGroupBlockVisibility) type = graphene.String(required=True) chapter = graphene.Field(ChapterNode) @classmethod def mutate_and_get_payload(cls, root, info, **kwargs): id_param = kwargs['id'] visibility_list = kwargs.get('visibility', None) mutation_type = kwargs['type'] chapter = get_object(Chapter, id_param) if visibility_list is not None: for v in visibility_list: school_class = get_object(SchoolClass, v.school_class_id) if v.hidden: if mutation_type == 'chapter-title': chapter.title_hidden_for.add(school_class) else: chapter.description_hidden_for.add(school_class) else: if mutation_type == 'chapter-title': chapter.title_hidden_for.remove(school_class) else: chapter.description_hidden_for.remove(school_class) chapter.save() return cls(chapter=chapter)