From 8515fa1bbe99ea2f8aff267f508ecf55d18631eb Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Tue, 30 Jan 2024 17:54:41 +0100 Subject: [PATCH] Allow accessing coursebook for different object types (courses, groups, ...) --- .../apps/alsijil/frontend/components/Coursebook.vue | 10 ++++++++-- .../alsijil/frontend/components/coursebook.graphql | 4 ++-- aleksis/apps/alsijil/frontend/index.js | 9 +++++---- aleksis/apps/alsijil/schema/__init__.py | 8 ++++---- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/aleksis/apps/alsijil/frontend/components/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/Coursebook.vue index 9efbcfa07..961367a41 100644 --- a/aleksis/apps/alsijil/frontend/components/Coursebook.vue +++ b/aleksis/apps/alsijil/frontend/components/Coursebook.vue @@ -43,11 +43,16 @@ export default { props: { // Either as props OR route params // TODO: Remove default? - courseId: { + objId: { type: [Number, String], required: false, default: 0, }, + objType: { + type: String, + required: false, + default: "group", + }, // Next two in ISODate dateStart: { type: String, @@ -69,7 +74,8 @@ export default { gqlQueryArgs() { return { // Assure courseId is a number - courseId: Number(this.courseId), + objId: Number(this.objId), + objType: this.objType.toUpperCase(), dateStart: this.dateStart, dateEnd: this.dateEnd, }; diff --git a/aleksis/apps/alsijil/frontend/components/coursebook.graphql b/aleksis/apps/alsijil/frontend/components/coursebook.graphql index 2986bf96b..e2fb931a3 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook.graphql @@ -1,5 +1,5 @@ -query gqlDocumentationsForCoursebook($courseId: ID!, $dateStart: Date!, $dateEnd: Date!) { - items: documentationsForCoursebook(courseId: $courseId, dateStart: $dateStart, dateEnd: $dateEnd) { +query gqlDocumentationsForCoursebook($objId: ID!, $objType: String!, $dateStart: Date!, $dateEnd: Date!) { + items: documentationsForCoursebook(objId: $objId, objType: $objType, dateStart: $dateStart, dateEnd: $dateEnd) { id course { id diff --git a/aleksis/apps/alsijil/frontend/index.js b/aleksis/apps/alsijil/frontend/index.js index fe62f3a33..aff43c39a 100644 --- a/aleksis/apps/alsijil/frontend/index.js +++ b/aleksis/apps/alsijil/frontend/index.js @@ -394,19 +394,20 @@ export default { }, }, { - path: "coursebook/:courseId(\\d+)/", + path: "coursebook/:objType(group|course|teacher)/:objId(\\d+)/", component: () => import("./components/Coursebook.vue"), redirect: to => { console.log('redirect to', to); - return { name: "alsijil.coursebook_by_course_id_and_date", + return { name: "alsijil.coursebook_by_obj_id_and_date", params: { - courseId: to.params.courseId, + objType: to.params.objType, + objId: to.params.objId, dateStart: DateTime.now().toISODate(), dateEnd: DateTime.now().plus({ weeks: 1 }).toISODate(), }, }; }, - name: "alsijil.coursebook_by_course_id", + name: "alsijil.coursebook_by_obj_id", props: true, meta: { inMenu: true, diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index e325627b6..c407a6eff 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -23,7 +23,8 @@ class Query(graphene.ObjectType): ) documentations_for_coursebook = FilterOrderList( DocumentationType, - course_id = graphene.ID(required=True), + obj_type = graphene.String(required=True), + obj_id = graphene.ID(required=True), date_start=graphene.Date(required=True), date_end=graphene.Date(required=True), ) @@ -34,12 +35,11 @@ class Query(graphene.ObjectType): ) return documentations - def resolve_documentations_for_coursebook(root, info, course_id, date_start, date_end, **kwargs): + def resolve_documentations_for_coursebook(root, info, obj_type, obj_id, date_start, date_end, **kwargs): datetime_start = datetime.combine(date_start, datetime.min.time()) datetime_end = datetime.combine(date_end, datetime.max.time()) - # TODO: later on, allow getting documentations for other types than courses, e.g. groups or persons - return Documentation.get_for_coursebook("COURSE", course_id, datetime_start, datetime_end, info.context) + return Documentation.get_for_coursebook(obj_type, obj_id, datetime_start, datetime_end, info.context) class Mutation(graphene.ObjectType): -- GitLab