diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py index a866e80c4686f4935aee8b96c9d54a896eb1ffc7..68e327529272ce6c28ad765c9a3d8a5b0fdbfe37 100644 --- a/aleksis/apps/alsijil/schema/documentation.py +++ b/aleksis/apps/alsijil/schema/documentation.py @@ -136,39 +136,43 @@ class DocumentationBatchCreateOrUpdateMutation(graphene.Mutation): documentations = graphene.List(DocumentationType) @classmethod - def mutate(cls, root, info, input): - for doc in input: - id = doc.id + def create_or_update(cls, info, doc): + id = doc.id - # 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) + # 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( + if not info.context.user.has_perm( "alsijil.add_documentation_for_lesson_event_rule", lesson_event - ): - raise PermissionDenied() - - 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=doc.topic or "", - homework=doc.homework or "", - group_note=doc.group_note or "", - ) # 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 = doc.topic or "" - obj.homework = doc.homework or "" - obj.group_note = doc.group_note or "" - obj.save() - - return DocumentationBatchCreateOrUpdateMutation(documentations=obj) + ): + raise PermissionDenied() + + return 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=doc.topic or "", + homework=doc.homework or "", + group_note=doc.group_note or "", + ) # 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 = doc.topic or "" + obj.homework = doc.homework or "" + obj.group_note = doc.group_note or "" + obj.save() + return obj + + @classmethod + def mutate(cls, root, info, input): + objs = [cls.create_or_update(info, doc) for doc in input] + + return DocumentationBatchCreateOrUpdateMutation(documentations=objs)