From 19e2816e429b74d2923b4f95242e1662855039d8 Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Sun, 25 Feb 2024 17:20:40 +0100 Subject: [PATCH] Adapt to CRUD refactoring --- .../frontend/components/AmendLesson.vue | 12 ++-- .../frontend/components/amendLesson.graphql | 18 +++--- aleksis/apps/chronos/schema/__init__.py | 56 +++++++++---------- 3 files changed, 40 insertions(+), 46 deletions(-) diff --git a/aleksis/apps/chronos/frontend/components/AmendLesson.vue b/aleksis/apps/chronos/frontend/components/AmendLesson.vue index 587ccdf0..5473933f 100644 --- a/aleksis/apps/chronos/frontend/components/AmendLesson.vue +++ b/aleksis/apps/chronos/frontend/components/AmendLesson.vue @@ -91,9 +91,9 @@ import { gqlSubjects, gqlPersons, gqlRooms, - createAmendLesson, - patchAmendLesson, - deleteAmendLesson, + createAmendLessons, + patchAmendLessons, + deleteAmendLessons, } from "./amendLesson.graphql"; export default { @@ -140,10 +140,10 @@ export default { cancelled: this.selectedEvent.meta.cancelled, comment: this.selectedEvent.meta.comment, }, - gqlCreateMutation: createAmendLesson, - gqlPatchMutation: patchAmendLesson, + gqlCreateMutation: createAmendLessons, + gqlPatchMutation: patchAmendLessons, deleteEvent: false, - gqlDeleteMutation: deleteAmendLesson, + gqlDeleteMutation: deleteAmendLessons, }; }, methods: { diff --git a/aleksis/apps/chronos/frontend/components/amendLesson.graphql b/aleksis/apps/chronos/frontend/components/amendLesson.graphql index a93e8918..87fdf38f 100644 --- a/aleksis/apps/chronos/frontend/components/amendLesson.graphql +++ b/aleksis/apps/chronos/frontend/components/amendLesson.graphql @@ -19,9 +19,9 @@ query gqlRooms { } } -mutation createAmendLesson($input: CreateLessonEventInput!) { - createAmendLesson(input: $input) { - lessonEvent { +mutation createAmendLessons($input: [BatchCreateLessonEventInput]!) { + createAmendLessons(input: $input) { + items: lessonEvents { id amends { id @@ -46,9 +46,9 @@ mutation createAmendLesson($input: CreateLessonEventInput!) { } } -mutation patchAmendLesson($input: PatchLessonEventInput!, $id: ID!) { - patchAmendLesson(input: $input, id: $id) { - lessonEvent { +mutation patchAmendLessons($input: [BatchPatchLessonEventInput]!) { + patchAmendLessons(input: $input) { + items: lessonEvents { id subject { id @@ -68,8 +68,8 @@ mutation patchAmendLesson($input: PatchLessonEventInput!, $id: ID!) { } } -mutation deleteAmendLesson($id: ID!) { - deleteAmendLesson(id: $id) { - ok +mutation deleteAmendLessons($ids: [ID]!) { + deleteAmendLesson(ids: $ids) { + deletionCount } } diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py index 0bdbe2db..71315520 100644 --- a/aleksis/apps/chronos/schema/__init__.py +++ b/aleksis/apps/chronos/schema/__init__.py @@ -2,10 +2,9 @@ from datetime import timezone import graphene from graphene_django import DjangoObjectType -from graphene_django_cud.mutations import DjangoCreateMutation, DjangoPatchMutation +from graphene_django_cud.mutations import DjangoBatchCreateMutation, DjangoBatchDeleteMutation, DjangoBatchPatchMutation from aleksis.core.models import CalendarEvent, Group, Person, Room -from aleksis.core.schema.base import DeleteMutation from ..models import LessonEvent from ..util.chronos_helpers import get_classes, get_rooms, get_teachers @@ -56,6 +55,9 @@ class LessonEventType(DjangoObjectType): "cancelled", "comment", ) + filter_fields = { + "id": ["exact", "lte", "gte"], + } class DatetimeTimezoneMixin: @@ -77,20 +79,8 @@ class DatetimeTimezoneMixin: value = value.replace(tzinfo=timezone.utc) return value - @classmethod - def before_save(cls, root, info, input, obj, patch_obj=False): - # before_save has different signatures for different mutations - # This handles create & patch - # https://graphene-django-cud.readthedocs.io/en/latest/guide/other-hooks.html?highlight=before_save#before-save - - if patch_obj: - obj = patch_obj - - obj.timezone = obj.amends.timezone - return obj - -class AmendLessonCreateMutation(DatetimeTimezoneMixin, DjangoCreateMutation): +class AmendLessonBatchCreateMutation(DatetimeTimezoneMixin, DjangoBatchCreateMutation): class Meta: model = LessonEvent permissions = ("chronos.edit_substitution_rule",) @@ -106,17 +96,30 @@ class AmendLessonCreateMutation(DatetimeTimezoneMixin, DjangoCreateMutation): "comment", ) + @classmethod + def before_save(cls, root, info, input, created_objects): + for obj in created_objects: + obj.timezone = obj.amends.timezone + return created_objects + -class AmendLessonPatchMutation(DatetimeTimezoneMixin, DjangoPatchMutation): +class AmendLessonBatchPatchMutation(DatetimeTimezoneMixin, DjangoBatchPatchMutation): class Meta: model = LessonEvent permissions = ("chronos.edit_substitution_rule",) only_fields = ("subject", "teachers", "groups", "rooms", "cancelled", "comment") + @classmethod + def before_save(cls, root, info, input, updated_objects): + for obj in updated_objects: + obj.timezone = obj.amends.timezone + return updated_objects + -class AmendLessonDeleteMutation(DeleteMutation): - klass = LessonEvent - permission_required = "chronos.edit_substitution_rule" +class AmendLessonBatchDeleteMutation(DjangoBatchDeleteMutation): + class Meta: + model = LessonEvent + permissions = ("chronos.delete_substitution_rule",) class TimetableType(graphene.Enum): @@ -139,15 +142,6 @@ class TimetableObjectType(graphene.ObjectType): return f"{root.type.value}-{root.id}" -class LessonEventType(DjangoObjectType): - class Meta: - model = LessonEvent - fields = ("id",) - filter_fields = { - "id": ["exact", "lte", "gte"], - } - - class Query(graphene.ObjectType): timetable_teachers = graphene.List(TimetablePersonType) timetable_groups = graphene.List(TimetableGroupType) @@ -197,6 +191,6 @@ class Query(graphene.ObjectType): class Mutation(graphene.ObjectType): - create_amend_lesson = AmendLessonCreateMutation.Field() - patch_amend_lesson = AmendLessonPatchMutation.Field() - delete_amend_lesson = AmendLessonDeleteMutation.Field() + create_amend_lessons = AmendLessonBatchCreateMutation.Field() + patch_amend_lessons = AmendLessonBatchPatchMutation.Field() + delete_amend_lessons = AmendLessonBatchDeleteMutation.Field() -- GitLab