Newer
Older
from graphene_django.types import DjangoObjectType
from graphene_django_cud.mutations import (
DjangoBatchCreateMutation,
DjangoBatchPatchMutation,
DjangoCreateMutation,
)
from guardian.shortcuts import get_objects_for_user
from django.core.exceptions import PermissionDenied
from aleksis.apps.chronos.models import LessonEvent
from aleksis.core.schema.base import (
DeleteMutation,
DjangoFilterMixin,
PermissionBatchPatchMixin,
PermissionsTypeMixin,
)
from ..models import Documentation
class DocumentationType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
class Meta:
model = Documentation
fields = (
"id",
"course",
"lesson_event",
"subject",
"topic",
"homework",
"group_note",
"datetime_start",
"datetime_end",
"date_start",
"date_end",
)
filter_fields = {
"id": ["exact", "lte", "gte"],
"course__name": ["exact"],
}
@classmethod
def get_queryset(cls, queryset, info):
return get_objects_for_user(info.context.user, "alsijil.view_documentation", queryset)
class DocumentationCreateMutation(DjangoCreateMutation):
class Meta:
model = Documentation
"course",
"lesson_event",
"subject",
"topic",
"homework",
"group_note",
"datetime_start",
"datetime_end",
"date_start",
"date_end",
)
optional_fields = (
"course",
"lesson_event",
"subject",
"topic",
"homework",
"group_note",
"datetime_start",
"datetime_end",
"date_start",
"date_end",
)
permissions = ("alsijil.add_documentation",) # FIXME
class DocumentationBatchCreateMutation(DjangoBatchCreateMutation):
class Meta:
model = Documentation
"id",
"course",
"lesson_event",
"subject",
"topic",
"homework",
"group_note",
"datetime_start",
"datetime_end",
"date_start",
"date_end",
)
permissions = ("alsijil.add_documentation",) # FIXME
class DocumentationDeleteMutation(DeleteMutation):
klass = Documentation
permission_required = "alsijil.delete_documentation_rule" # FIXME
class DocumentationBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation):
class Meta:
model = Documentation
"id",
"course",
"lesson_event",
"subject",
"topic",
"homework",
"group_note",
"datetime_start",
"datetime_end",
"date_start",
"date_end",
)
permissions = ("alsijil.edit_documentation_rule",) # FIXME
class DocumentationInputType(graphene.InputObjectType):
course = graphene.ID(required=False)
subject = graphene.ID(required=False)
topic = graphene.String(required=False)
homework = graphene.String(required=False)
group_note = graphene.String(required=False)
class DocumentationCreateOrUpdateMutation(graphene.Mutation):
class Arguments:
id = graphene.ID(required=True)
input = DocumentationInputType(required=False)
documentation = graphene.Field(DocumentationType)
@classmethod
def mutate(cls, root, info, id, input):
# Sadly, we can't use the update_or_create method since create_defaults is only introduced in Django 5.0
if id.startswith("DUMMY"):
dummy, lesson_event_id, datetime_start, datetime_end = id.split(";")
lesson_event = LessonEvent.objects.get(id=lesson_event_id)
if not info.context.user.has_perm(
"alsijil.add_documentation_for_lesson_event_rule", lesson_event
):
obj = Documentation.objects.create(
datetime_start=datetime.fromisoformat(datetime_start),
datetime_end=datetime.fromisoformat(datetime_end),
lesson_event=lesson_event,
course=lesson_event.course,
subject=lesson_event.subject,
topic=input.topic,
homework=input.homework,
group_note=input.group_note,
) # TODO: Add course & subject
else:
obj = Documentation.objects.get(id=id)
if not info.context.user.has_perm("alsijil.edit_documentation_rule", obj):
raise PermissionDenied()
obj.topic = input.topic
obj.homework = input.homework
obj.group_note = input.group_note
obj.save()
return DocumentationCreateOrUpdateMutation(documentation=obj)