skillbox/server/books/schema/mutations/module.py

73 lines
2.1 KiB
Python

import graphene
from graphene import relay
from api.utils import get_errors, get_object
from books.models import Module
from books.schema.queries import ModuleNode
class UpdateSolutionVisibility(relay.ClientIDMutation):
class Input:
slug = graphene.String()
enabled = graphene.Boolean()
success = graphene.Boolean()
solutions_enabled = graphene.Boolean()
errors = graphene.List(graphene.String)
@classmethod
def mutate_and_get_payload(cls, root, info, **args):
try:
slug = args.get('slug')
enabled = args.get('enabled')
user = info.context.user
if 'users.can_manage_school_class_content' not in user.get_role_permissions():
raise PermissionError()
module = Module.objects.get(slug=slug)
if enabled:
module.solutions_enabled_by.add(user)
else:
module.solutions_enabled_by.remove(user)
module.save()
return cls(success=True, solutions_enabled=enabled)
except PermissionError:
errors = ["You don't have the permission to do that."]
except Exception as e:
errors = ['Error: {}'.format(e)]
return cls(success=False, solutions_enabled=None, errors=errors)
class UpdateLastModule(relay.ClientIDMutation):
class Input:
# todo: use slug here too
id = graphene.ID()
module = graphene.Field(ModuleNode)
errors = graphene.List(graphene.String)
@classmethod
def mutate_and_get_payload(cls, root, info, **args):
try:
user = info.context.user
id = args.get('id')
module = get_object(Module, id)
if not module:
raise Module.DoesNotExist
user.last_module = module
user.save()
return cls(module=module)
except Module.DoesNotExist:
return cls(errors=['Module not found'])
except Exception as e:
errors = ['Error: {}'.format(e)]
return cls(errors=errors)