From 52a9cd148ee87b45db099c3d554d186f123f8d47 Mon Sep 17 00:00:00 2001 From: magicfelix <felix@felix-zauberer.de> Date: Tue, 15 Aug 2023 01:59:12 +0200 Subject: [PATCH] Add GraphQL schema for Documentation --- aleksis/apps/alsijil/schema/__init__.py | 31 ++++++++++ aleksis/apps/alsijil/schema/documentation.py | 64 ++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 aleksis/apps/alsijil/schema/__init__.py create mode 100644 aleksis/apps/alsijil/schema/documentation.py diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py new file mode 100644 index 000000000..26cd82507 --- /dev/null +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -0,0 +1,31 @@ +import graphene +from graphene_django import DjangoObjectType + +from django.db.models.query_utils import Q + +from aleksis.core.schema.base import DjangoFilterMixin, FilterOrderList + +from ..models import Documentation, Participation +from .documentation import ( + DocumentationType, + DocumentationCreateMutation, + DocumentationBatchCreateMutation, + DocumentationDeleteMutation, + DocumentationBatchPatchMutation +) + + +class Query(graphene.ObjectType): + documentations = FilterOrderList(DocumentationType) + documentations_by_course_id = FilterOrderList(DocumentationType, course_id=graphene.ID(required=True)) + + def resolve_documentations_by_course_id(root, info, course_id, **kwargs): + documentations = Documentation.objects.filter(Q(course__pk=course_id) | Q(lesson_event__course__pk=course_id)) + return documentations + + +class Mutation(graphene.ObjectType): + create_documentation = DocumentationCreateMutation.Field() + create_documentations = DocumentationBatchCreateMutation.Field() + delete_documentation = DocumentationDeleteMutation.Field() + update_documentations = DocumentationBatchPatchMutation.Field() diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py new file mode 100644 index 000000000..d4752e09e --- /dev/null +++ b/aleksis/apps/alsijil/schema/documentation.py @@ -0,0 +1,64 @@ +import graphene +from calendarweek import CalendarWeek +from graphene_django import DjangoListField +from graphene_django.types import DjangoObjectType +from graphene_django_cud.mutations import ( + DjangoBatchCreateMutation, + DjangoBatchPatchMutation, + DjangoCreateMutation, +) +from guardian.shortcuts import get_objects_for_user + +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"], + } + + +class DocumentationCreateMutation(DjangoCreateMutation): + class Meta: + model = Documentation + fields = ("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 = ("",) # FIXME + + @classmethod + def before_mutate(cls, root, info, input): + if "year" in input and "calendarWeek" in input: + cw = CalendarWeek(year=input["year"], week=input["week"]) + input["date_start"] = cw[0] + input["date_end"] = cw[6] + return input + + +class DocumentationBatchCreateMutation(DjangoBatchCreateMutation): + class Meta: + model = Documentation + fields = ("id", "course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end") + permissions = ("",) # FIXME + + +class DocumentationDeleteMutation(DeleteMutation): + klass = Documentation + permission_required = "" # FIXME + + +class DocumentationBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): + class Meta: + model = Documentation + fields = ("id", "course", "lesson_event", "subject", "topic", "homework", "group_note", "datetime_start", "datetime_end", "date_start", "date_end") + permissions = ("",) # FIXME -- GitLab