feat: group queries voor alle GETs

This commit is contained in:
Adriaan Jacquet 2025-04-09 21:53:41 +02:00
parent 77ca390bd2
commit 5c9314aa59
2 changed files with 79 additions and 1 deletions

View file

@ -16,11 +16,15 @@ export class GroupController extends BaseController {
super(`class/${classid}/assignments/${assignmentNumber}/groups`);
}
update(classid: string, assignmentNumber: number) {
this.basePath = `class/${classid}/assignments/${assignmentNumber}/groups`;
}
async getAll(full = true): Promise<GroupsResponse> {
return this.get<GroupsResponse>(`/`, { full });
}
async getByNumber(num: number): Promise<GroupResponse> {
async getByNumber(num: number | string): Promise<GroupResponse> {
return this.get<GroupResponse>(`/${num}`);
}

View file

@ -0,0 +1,74 @@
import type { ClassesResponse } from "@/controllers/classes";
import { GroupController, type GroupResponse, type GroupsResponse } from "@/controllers/groups";
import type { QuestionsResponse } from "@/controllers/questions";
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);
function groupsQueryKey(classid: string, assignmentNumber: number) {
return [ "groups", classid, assignmentNumber ];
}
function groupQueryKey(classid: string, assignmentNumber: number, groupNumber: number) {
return [ "group", classid, assignmentNumber, groupNumber ];
}
function groupSubmissionsQueryKey(classid: string, assignmentNumber: number, groupNumber: number) {
return [ "group-submissions", classid, assignmentNumber, groupNumber ];
}
export function useGroupsQuery(
classid: string,
assignmentNumber: number,
): UseQueryReturnType<GroupsResponse, Error> {
groupController.update(classid, assignmentNumber);
return useQuery({
queryKey: computed(() => (groupsQueryKey(classid, assignmentNumber))),
queryFn: async () => groupController.getAll(),
});
}
export function useGroupQuery(
classid: string,
assignmentNumber: number,
groupNumber: MaybeRefOrGetter<number | undefined>,
): UseQueryReturnType<GroupResponse, Error> {
groupController.update(classid, assignmentNumber);
return useQuery({
queryKey: computed(() => groupQueryKey(classid, assignmentNumber, toValue(groupNumber)!)),
queryFn: async () => groupController.getByNumber(toValue(groupNumber)!),
enabled: () => !isNaN(Number(toValue(groupNumber))),
});
}
export function useGroupSubmissionsQuery(
classid: string,
assignmentNumber: number,
groupNumber: MaybeRefOrGetter<number | undefined>,
full: MaybeRefOrGetter<boolean> = true,
): UseQueryReturnType<SubmissionsResponse, Error> {
groupController.update(classid, assignmentNumber);
return useQuery({
queryKey: computed(() => groupSubmissionsQueryKey(classid, assignmentNumber, toValue(groupNumber)!)),
queryFn: async () => groupController.getSubmissions(toValue(groupNumber)!, toValue(full)!),
enabled: () => !isNaN(Number(toValue(groupNumber))),
});
}
export function useGroupQuestionsQuery(
classid: string,
assignmentNumber: number,
groupNumber: MaybeRefOrGetter<number | undefined>,
full: MaybeRefOrGetter<boolean> = true,
): UseQueryReturnType<QuestionsResponse, Error> {
groupController.update(classid, assignmentNumber);
return useQuery({
queryKey: computed(() => groupSubmissionsQueryKey(classid, assignmentNumber, toValue(groupNumber)!)),
queryFn: async () => groupController.getSubmissions(toValue(groupNumber)!, toValue(full)!),
enabled: () => !isNaN(Number(toValue(groupNumber))),
});
}