From 73e3871af0724aa11265bebabea3bfff533e219d Mon Sep 17 00:00:00 2001 From: Adriaan Jacquet Date: Wed, 9 Apr 2025 22:29:08 +0200 Subject: [PATCH] fix: groups queries types gefixt --- frontend/src/controllers/groups.ts | 36 ++++++++++--------- frontend/src/queries/groups.ts | 56 +++++++++++++++++++----------- 2 files changed, 56 insertions(+), 36 deletions(-) diff --git a/frontend/src/controllers/groups.ts b/frontend/src/controllers/groups.ts index 361dd9d3..2ba54cb7 100644 --- a/frontend/src/controllers/groups.ts +++ b/frontend/src/controllers/groups.ts @@ -12,39 +12,43 @@ export interface GroupResponse { } export class GroupController extends BaseController { - constructor(classid: string, assignmentNumber: number) { - super(`class/${classid}/assignments/${assignmentNumber}/groups`); + constructor() { + super(''); } update(classid: string, assignmentNumber: number) { this.basePath = `class/${classid}/assignments/${assignmentNumber}/groups`; } - async getAll(full = true): Promise { - return this.get(`/`, { full }); + protected getBasePath(classid: string, assignmentNumber: number) { + return `class/${classid}/assignments/${assignmentNumber}/groups`; } - async getByNumber(num: number | string): Promise { - return this.get(`/${num}`); + async getAll(classid: string, assignmentNumber: number, full = true): Promise { + return this.get(`${this.getBasePath(classid, assignmentNumber)}/`, { full }); } - async createGroup(data: GroupDTO): Promise { - return this.post(`/`, data); + async getByNumber(classid: string, assignmentNumber: number, num: number | string): Promise { + return this.get(`${this.getBasePath(classid, assignmentNumber)}/${num}`); } - async deleteGroup(num: number): Promise { - return this.delete(`/${num}`); + async createGroup(classid: string, assignmentNumber: number, data: GroupDTO): Promise { + return this.post(`${this.getBasePath(classid, assignmentNumber)}/`, data); } - async updateGroup(num: number, data: Partial): Promise { - return this.put(`/${num}`, data); + async deleteGroup(classid: string, assignmentNumber: number, num: number): Promise { + return this.delete(`${this.getBasePath(classid, assignmentNumber)}/${num}`); } - async getSubmissions(groupNumber: number, full = true): Promise { - return this.get(`/${groupNumber}/submissions`, { full }); + async updateGroup(classid: string, assignmentNumber: number, num: number, data: Partial): Promise { + return this.put(`${this.getBasePath(classid, assignmentNumber)}/${num}`, data); } - async getQuestions(groupNumber: number, full = true): Promise { - return this.get(`/${groupNumber}/questions`, { full }); + async getSubmissions(classid: string, assignmentNumber: number, groupNumber: number, full = true): Promise { + return this.get(`${this.getBasePath(classid, assignmentNumber)}/${groupNumber}/submissions`, { full }); + } + + async getQuestions(classid: string, assignmentNumber: number, groupNumber: number, full = true): Promise { + return this.get(`${this.getBasePath(classid, assignmentNumber)}/${groupNumber}/questions`, { full }); } } diff --git a/frontend/src/queries/groups.ts b/frontend/src/queries/groups.ts index dec35013..def17524 100644 --- a/frontend/src/queries/groups.ts +++ b/frontend/src/queries/groups.ts @@ -5,7 +5,7 @@ import type { SubmissionsResponse } from "@/controllers/submissions"; import { useQuery, type UseQueryReturnType } from "@tanstack/vue-query"; import { computed, toValue, type MaybeRefOrGetter } from "vue"; -const groupController = new GroupController('', 0); +const groupController = new GroupController(); function groupsQueryKey(classid: string, assignmentNumber: number) { return [ "groups", classid, assignmentNumber ]; @@ -20,15 +20,31 @@ function groupQuestionsQueryKey(classid: string, assignmentNumber: number, group return [ "group-questions", classid, assignmentNumber, groupNumber, full ]; } +function checkEnabled( + classid: string | undefined, + assignmentNumber: number | undefined, + groupNumber: number | undefined, +): boolean { + return Boolean(classid) && !isNaN(Number(groupNumber)) && !isNaN(Number(assignmentNumber)); +} +function toValues( + classid: MaybeRefOrGetter, + assignmentNumber: MaybeRefOrGetter, + groupNumber: MaybeRefOrGetter, +) { + return { cid: toValue(classid), an: toValue(assignmentNumber), gn: toValue(groupNumber) }; +} + export function useGroupsQuery( - classid: string, - assignmentNumber: number, + classid: MaybeRefOrGetter, + assignmentNumber: MaybeRefOrGetter, ): UseQueryReturnType { - groupController.update(classid, assignmentNumber); + const { cid, an, gn } = toValues(classid, assignmentNumber, 1); return useQuery({ - queryKey: computed(() => (groupsQueryKey(classid, assignmentNumber))), - queryFn: async () => groupController.getAll(), + queryKey: computed(() => (groupsQueryKey(cid!, an!))), + queryFn: async () => groupController.getAll(cid!, an!), + enabled: () => checkEnabled(cid, an, 1), }); } @@ -37,12 +53,12 @@ export function useGroupQuery( assignmentNumber: number, groupNumber: MaybeRefOrGetter, ): UseQueryReturnType { - groupController.update(classid, assignmentNumber); + const { cid, an, gn } = toValues(classid, assignmentNumber, groupNumber); return useQuery({ - queryKey: computed(() => groupQueryKey(classid, assignmentNumber, toValue(groupNumber)!)), - queryFn: async () => groupController.getByNumber(toValue(groupNumber)!), - enabled: () => !isNaN(Number(toValue(groupNumber))), + queryKey: computed(() => groupQueryKey(cid!, an!, gn!)), + queryFn: async () => groupController.getByNumber(cid!, an!, gn!), + enabled: () => checkEnabled(cid, an, gn), }); } @@ -52,26 +68,26 @@ export function useGroupSubmissionsQuery( groupNumber: MaybeRefOrGetter, full: MaybeRefOrGetter = true, ): UseQueryReturnType { - groupController.update(classid, assignmentNumber); + const { cid, an, gn } = toValues(classid, assignmentNumber, groupNumber); return useQuery({ - queryKey: computed(() => groupSubmissionsQueryKey(classid, assignmentNumber, toValue(groupNumber)!, toValue(full)!)), - queryFn: async () => groupController.getSubmissions(toValue(groupNumber)!, toValue(full)!), - enabled: () => !isNaN(Number(toValue(groupNumber))), + queryKey: computed(() => groupSubmissionsQueryKey(cid!, an!, gn!, toValue(full))), + queryFn: async () => groupController.getSubmissions(cid!, an!, gn!, toValue(full)), + enabled: () => checkEnabled(cid, an, gn), }); } export function useGroupQuestionsQuery( - classid: string, - assignmentNumber: number, + classid: MaybeRefOrGetter, + assignmentNumber: MaybeRefOrGetter, groupNumber: MaybeRefOrGetter, full: MaybeRefOrGetter = true, ): UseQueryReturnType { - groupController.update(toValue(classid)!, toValue(assignmentNumber)); + const { cid, an, gn } = toValues(classid, assignmentNumber, groupNumber); return useQuery({ - queryKey: computed(() => groupQuestionsQueryKey(classid, assignmentNumber, toValue(groupNumber)!, toValue(full)!)), - queryFn: async () => groupController.getSubmissions(toValue(groupNumber)!, toValue(full)!), - enabled: () => !isNaN(Number(toValue(groupNumber))), + queryKey: computed(() => groupQuestionsQueryKey(cid!, an!, gn!, toValue(full))), + queryFn: async () => groupController.getSubmissions(cid!, an!, gn!, toValue(full)), + enabled: () => checkEnabled(cid, an, gn), }); }