diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index 4452b3ba382d3253591891dffc2494830f19c2e9..e325627b6895dcfa16a040eea9ed6c1b4b468e36 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -10,6 +10,7 @@ from .documentation import ( DocumentationBatchCreateMutation, DocumentationBatchPatchMutation, DocumentationCreateMutation, + DocumentationCreateOrUpdateMutation, DocumentationDeleteMutation, DocumentationType, ) @@ -46,3 +47,5 @@ class Mutation(graphene.ObjectType): create_documentations = DocumentationBatchCreateMutation.Field() delete_documentation = DocumentationDeleteMutation.Field() update_documentations = DocumentationBatchPatchMutation.Field() + + create_or_update_documentation = DocumentationCreateOrUpdateMutation.Field() diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py index 9aa9f2cf862764ee733394a1779fad9138e1cf82..90382a1f0ff8ff5e5c6f73d149f3abfc919c434f 100644 --- a/aleksis/apps/alsijil/schema/documentation.py +++ b/aleksis/apps/alsijil/schema/documentation.py @@ -1,3 +1,4 @@ +import graphene from graphene_django.types import DjangoObjectType from graphene_django_cud.mutations import ( DjangoBatchCreateMutation, @@ -6,13 +7,13 @@ from graphene_django_cud.mutations import ( ) from guardian.shortcuts import get_objects_for_user +from aleksis.apps.chronos.models import LessonEvent from aleksis.core.schema.base import ( DeleteMutation, DjangoFilterMixin, PermissionBatchPatchMixin, PermissionsTypeMixin, ) - from ..models import Documentation @@ -113,3 +114,44 @@ class DocumentationBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatc "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(";") + + obj = Documentation.objects.create( + datetime_start=datetime_start, + datetime_end=datetime_end, + lesson_event=LessonEvent.objects.get(id=lesson_event_id), + topic=input.topic, + homework=input.homework, + group_note=input.group_note, + ) # TODO: Add course & subject + else: + obj = Documentations.objects.get(id=id) + obj.update( + topic=input.topic, + homework=input.homework, + group_note=input.group_note, + ) + + return DocumentationCreateOrUpdateMutation(documentation=obj)