From 34d18507600e4b5857495772f4e33ad429f30c6b Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Tue, 14 May 2024 11:22:02 +0200
Subject: [PATCH] Move documentation creation to model method

---
 aleksis/apps/alsijil/models.py               | 10 ++++++++++
 aleksis/apps/alsijil/schema/documentation.py |  8 +-------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index ad6aa5c4f..c4487066c 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -680,6 +680,16 @@ class Documentation(CalendarEvent):
         obj.save()
         return obj
 
+    @classmethod
+    def get_or_create_by_id(cls, _id: str|int, user):
+        if _id.startswith("DUMMY"):
+            return cls.create_from_lesson_event(
+                user,
+                *cls.parse_dummy(_id),
+            )
+
+        return cls.objects.get(id=_id)
+
 
 class ParticipationStatus(CalendarEvent):
     """A participation or absence record about a single person.
diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py
index 3c241e061..e8443965d 100644
--- a/aleksis/apps/alsijil/schema/documentation.py
+++ b/aleksis/apps/alsijil/schema/documentation.py
@@ -97,13 +97,7 @@ class DocumentationBatchCreateOrUpdateMutation(graphene.Mutation):
 
         # Sadly, we can't use the update_or_create method since create_defaults
         # is only introduced in Django 5.0
-        if _id.startswith("DUMMY"):
-            obj = Documentation.create_from_lesson_event(
-                info.context.user,
-                *Documentation.parse_dummy(_id),
-            )
-        else:
-            obj = Documentation.objects.get(id=_id)
+        obj = Documentation.get_or_create_by_id(_id, info.context.user)
 
         if not info.context.user.has_perm("alsijil.edit_documentation_rule", obj):
             raise PermissionDenied()
-- 
GitLab