From b088c0bc0fd96e83050781b38bfdd1014397a6c8 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Sat, 18 May 2024 15:25:47 +0200
Subject: [PATCH] Create types for ExtraMarks

---
 aleksis/apps/alsijil/schema/__init__.py    | 12 ++++++
 aleksis/apps/alsijil/schema/extra_marks.py | 43 ++++++++++++++++++++++
 2 files changed, 55 insertions(+)
 create mode 100644 aleksis/apps/alsijil/schema/extra_marks.py

diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
index 48e1c20c6..62440a144 100644
--- a/aleksis/apps/alsijil/schema/__init__.py
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -12,6 +12,12 @@ from aleksis.core.models import Group, Person
 from aleksis.core.schema.base import FilterOrderList
 from aleksis.core.schema.group import GroupType
 from aleksis.core.util.core_helpers import has_person
+from .extra_marks import (
+    ExtraMarkBatchCreateMutation,
+    ExtraMarkBatchPatchMutation,
+    ExtraMarkBatchDeleteMutation,
+    ExtraMarkType,
+)
 
 from ..models import Documentation
 from .documentation import (
@@ -48,6 +54,8 @@ class Query(graphene.ObjectType):
         end=graphene.Date(required=True),
     )
 
+    extra_marks = FilterOrderList(ExtraMarkType)
+
     def resolve_documentations_by_course_id(root, info, course_id, **kwargs):
         documentations = Documentation.objects.filter(
             Q(course__pk=course_id) | Q(amends__course__pk=course_id)
@@ -171,3 +179,7 @@ class Mutation(graphene.ObjectType):
     create_or_update_documentations = DocumentationBatchCreateOrUpdateMutation.Field()
     touch_documentation = TouchDocumentationMutation.Field()
     update_participation_statuses = ParticipationStatusBatchPatchMutation.Field()
+
+    create_extra_marks = ExtraMarkBatchCreateMutation.Field()
+    update_extra_marks = ExtraMarkBatchPatchMutation.Field()
+    delete_extra_marks = ExtraMarkBatchDeleteMutation.Field()
diff --git a/aleksis/apps/alsijil/schema/extra_marks.py b/aleksis/apps/alsijil/schema/extra_marks.py
new file mode 100644
index 000000000..912821014
--- /dev/null
+++ b/aleksis/apps/alsijil/schema/extra_marks.py
@@ -0,0 +1,43 @@
+from graphene_django import DjangoObjectType
+
+from aleksis.apps.alsijil.models import ExtraMark
+from aleksis.core.schema.base import OptimisticResponseTypeMixin, PermissionsTypeMixin, DjangoFilterMixin, \
+    BaseBatchCreateMutation, BaseBatchDeleteMutation, BaseBatchPatchMutation
+
+
+class ExtraMarkType(
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+    DjangoFilterMixin,
+    DjangoObjectType,
+):
+    class Meta:
+        model = ExtraMark
+        fields = (
+            "id",
+            "short_name",
+            "name",
+            "colour_fg",
+            "colour_bg",
+            "show_in_coursebook"
+        )
+
+class ExtraMarkBatchCreateMutation(BaseBatchCreateMutation):
+    class Meta:
+        model = ExtraMark
+        fields = ("short_name", "name", "colour_fg", "colour_bg", "show_in_coursebook")
+        optional_fields = ("name",)
+        permissions = ("alsijil.create_extra_mark",)  # FIXME
+
+
+class ExtraMarkBatchDeleteMutation(BaseBatchDeleteMutation):
+    class Meta:
+        model = ExtraMark
+        permission_required = "alsijil.delete_extra_mark"  # FIXME
+
+
+class ExtraMarkBatchPatchMutation(BaseBatchPatchMutation):
+    class Meta:
+        model = ExtraMark
+        fields = ("id", "short_name", "name", "colour_fg", "colour_bg", "show_in_coursebook")
+        permissions = ("alsijil.change_extra_mark",)  # FIXME
-- 
GitLab