From 8ad8f42fa2aabd4065ba048cd8328b189fd5354e Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Sat, 11 May 2024 17:44:55 +0200
Subject: [PATCH] Create schema to update participation statuses

---
 .../absences/participationStatus.graphql      | 18 +++++++++++++++
 .../components/coursebook/coursebook.graphql  |  1 +
 aleksis/apps/alsijil/schema/__init__.py       |  2 ++
 .../alsijil/schema/participation_status.py    | 22 +++++++++++++++++--
 4 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql
new file mode 100644
index 000000000..e75232635
--- /dev/null
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql
@@ -0,0 +1,18 @@
+mutation updateParticipationStatuses(
+  $input: [BatchPatchParticipationStatusInput]!
+) {
+  updateParticipationStatuses(input: $input) {
+    items: participationStatuses {
+      id
+      isOptimistic
+      relatedDocumentation {
+        id
+      }
+      absenceReason {
+        id
+        name
+        shortName
+      }
+    }
+  }
+}
diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql
index dc5c55f1a..83a6a459f 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql
@@ -81,6 +81,7 @@ query documentationsForCoursebook(
         name
         shortName
       }
+      isOptimistic
     }
     topic
     homework
diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
index aae1b7060..e4e48be10 100644
--- a/aleksis/apps/alsijil/schema/__init__.py
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -17,6 +17,7 @@ from .documentation import (
     DocumentationBatchCreateOrUpdateMutation,
     DocumentationType,
 )
+from .participation_status import ParticipationStatusBatchPatchMutation
 
 
 class Query(graphene.ObjectType):
@@ -119,3 +120,4 @@ class Query(graphene.ObjectType):
 
 class Mutation(graphene.ObjectType):
     create_or_update_documentations = DocumentationBatchCreateOrUpdateMutation.Field()
+    update_participation_statuses = ParticipationStatusBatchPatchMutation.Field()
diff --git a/aleksis/apps/alsijil/schema/participation_status.py b/aleksis/apps/alsijil/schema/participation_status.py
index 48053dc22..e99586e2e 100644
--- a/aleksis/apps/alsijil/schema/participation_status.py
+++ b/aleksis/apps/alsijil/schema/participation_status.py
@@ -1,10 +1,20 @@
 from graphene_django import DjangoObjectType
 
 from aleksis.apps.alsijil.models import ParticipationStatus
-from aleksis.core.schema.base import DjangoFilterMixin, PermissionsTypeMixin
+from aleksis.core.schema.base import (
+    BaseBatchPatchMutation,
+    DjangoFilterMixin,
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+)
 
 
-class ParticipationStatusType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
+class ParticipationStatusType(
+    OptimisticResponseTypeMixin,
+    PermissionsTypeMixin,
+    DjangoFilterMixin,
+    DjangoObjectType,
+):
     class Meta:
         model = ParticipationStatus
         fields = (
@@ -14,3 +24,11 @@ class ParticipationStatusType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObj
             "related_documentation",
             "base_absence",
         )
+
+
+class ParticipationStatusBatchPatchMutation(BaseBatchPatchMutation):
+    class Meta:
+        model = ParticipationStatus
+        fields = ("id", "absence_reason")  # Only the reason can be updated after creation
+        permissions = ("alsijil.change_participation_status",)  # FIXME
+        return_field_name = "participationStatuses"
-- 
GitLab