From a279d366334160093ee67d7a2f84c6eb5c833094 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Sun, 19 May 2024 18:54:59 +0200
Subject: [PATCH] Create schemata for personal notes

---
 aleksis/apps/alsijil/schema/__init__.py       |  9 ++++
 .../alsijil/schema/participation_status.py    | 22 +++++++++-
 aleksis/apps/alsijil/schema/personal_note.py  | 44 +++++++++++++++++++
 3 files changed, 74 insertions(+), 1 deletion(-)
 create mode 100644 aleksis/apps/alsijil/schema/personal_note.py

diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
index 62440a144..4ecfef27e 100644
--- a/aleksis/apps/alsijil/schema/__init__.py
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -18,6 +18,11 @@ from .extra_marks import (
     ExtraMarkBatchDeleteMutation,
     ExtraMarkType,
 )
+from .personal_note import (
+    PersonalNoteBatchCreateMutation,
+    PersonalNoteBatchDeleteMutation,
+    PersonalNoteBatchPatchMutation,
+)
 
 from ..models import Documentation
 from .documentation import (
@@ -183,3 +188,7 @@ class Mutation(graphene.ObjectType):
     create_extra_marks = ExtraMarkBatchCreateMutation.Field()
     update_extra_marks = ExtraMarkBatchPatchMutation.Field()
     delete_extra_marks = ExtraMarkBatchDeleteMutation.Field()
+
+    create_personal_note = PersonalNoteBatchCreateMutation.Field()
+    update_personal_note = PersonalNoteBatchPatchMutation.Field()
+    delete_personal_note = PersonalNoteBatchDeleteMutation.Field()
diff --git a/aleksis/apps/alsijil/schema/participation_status.py b/aleksis/apps/alsijil/schema/participation_status.py
index e99586e2e..2e5a99faf 100644
--- a/aleksis/apps/alsijil/schema/participation_status.py
+++ b/aleksis/apps/alsijil/schema/participation_status.py
@@ -1,6 +1,8 @@
+import graphene
 from graphene_django import DjangoObjectType
 
-from aleksis.apps.alsijil.models import ParticipationStatus
+from aleksis.apps.alsijil.models import ParticipationStatus, NewPersonalNote
+from aleksis.apps.alsijil.schema.personal_note import PersonalNoteType
 from aleksis.core.schema.base import (
     BaseBatchPatchMutation,
     DjangoFilterMixin,
@@ -25,6 +27,24 @@ class ParticipationStatusType(
             "base_absence",
         )
 
+    extra_mark_notes = graphene.List(PersonalNoteType)
+    note_notes = graphene.List(PersonalNoteType)
+
+    @staticmethod
+    def resolve_extra_mark_notes(root: ParticipationStatus, info, **kwargs):
+        return NewPersonalNote.objects.filter(
+            person=root.person,
+            documentation=root.related_documentation,
+            extra_mark__isnull=False,
+        )
+    @staticmethod
+    def resolve_note_notes(root: ParticipationStatus, info, **kwargs):
+        return NewPersonalNote.objects.filter(
+            person=root.person,
+            documentation=root.related_documentation,
+            note__isnull=False,
+        )
+
 
 class ParticipationStatusBatchPatchMutation(BaseBatchPatchMutation):
     class Meta:
diff --git a/aleksis/apps/alsijil/schema/personal_note.py b/aleksis/apps/alsijil/schema/personal_note.py
new file mode 100644
index 000000000..33f44b5ef
--- /dev/null
+++ b/aleksis/apps/alsijil/schema/personal_note.py
@@ -0,0 +1,44 @@
+from graphene_django import DjangoObjectType
+
+from aleksis.apps.alsijil.models import NewPersonalNote
+from aleksis.core.schema.base import (
+    DjangoFilterMixin,
+    BaseBatchCreateMutation,
+    BaseBatchDeleteMutation,
+    BaseBatchPatchMutation,
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+)
+
+
+class PersonalNoteType(
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+    DjangoFilterMixin,
+    DjangoObjectType,
+):
+    class Meta:
+        model = NewPersonalNote
+        fields = (
+            "id",
+            "note",
+            "extra_mark",
+        )
+
+class PersonalNoteBatchCreateMutation(BaseBatchCreateMutation):
+    class Meta:
+        model = NewPersonalNote
+        fields = ("note", "extra_mark", "documentation", "person")
+        permissions = ("alsijil.create_personal_note",)  # FIXME
+
+
+class PersonalNoteBatchPatchMutation(BaseBatchPatchMutation):
+    class Meta:
+        model = NewPersonalNote
+        fields = ("id", "note", "extra_mark", "documentation", "person")
+        permissions = ("alsijil.change_personal_note",)  # FIXME
+
+class PersonalNoteBatchDeleteMutation(BaseBatchDeleteMutation):
+    class Meta:
+        model = NewPersonalNote
+        permission_required = "alsijil.delete_personal_note"  # FIXME
-- 
GitLab