feat(frontend): eerste queries voor assignments

This commit is contained in:
Joyelle Ndagijimana 2025-04-11 13:01:58 +02:00
parent ce5e9cd342
commit 45cb020861
10 changed files with 560 additions and 218 deletions

View file

@ -1,17 +1,55 @@
import {useMutation, useQueryClient, type UseMutationReturnType} from "@tanstack/vue-query";
import {AssignmentController, type AssignmentResponse} from "@/controllers/assignments.ts";
import type {AssignmentDTO} from "@dwengo-1/common/interfaces/assignment";
import {toValue} from "vue";
import {computed, type MaybeRefOrGetter, toValue} from "vue";
import {useQuery, type UseQueryReturnType} from "@tanstack/vue-query";
import {AssignmentController, type AssignmentResponse, type AssignmentsResponse} from "@/controllers/assignments.ts";
import type {SubmissionsResponse} from "@/controllers/submissions.ts";
export function useCreateAssignmentMutation(classId: string): UseMutationReturnType<AssignmentResponse, Error, AssignmentDTO, unknown> {
const queryClient = useQueryClient();
export function useAssignmentsQuery(classId: MaybeRefOrGetter<string | undefined>, full: MaybeRefOrGetter<boolean> = true): UseQueryReturnType<AssignmentsResponse, Error> {
const resolvedClassId = toValue(classId) as string;
const resolvedFull = toValue(full);
const assignmentController = new AssignmentController(toValue(classId));
return useMutation({
mutationFn: async (data) => assignmentController.createAssignment(data),
onSuccess: async () => {
await queryClient.invalidateQueries({queryKey: ["assignments"]});
},
});
const assignmentController = new AssignmentController(resolvedClassId);
return useQuery({
queryKey: computed(() => [
'assignments',
resolvedClassId,
resolvedFull,
]),
queryFn: async () => assignmentController.getAll(resolvedFull),
enabled: () => Boolean(resolvedClassId)
})
}
export function useAssignmentQuery(classId: MaybeRefOrGetter<string | undefined>, num: MaybeRefOrGetter<number>): UseQueryReturnType<AssignmentResponse, Error> {
const resolvedClassId = toValue(classId) as string;
const resolvedNum = toValue(num);
const assignmentController = new AssignmentController(resolvedClassId);
return useQuery({
queryKey: computed(() => [
'assignment',
resolvedClassId,
resolvedNum,
]),
queryFn: async () => assignmentController.getByNumber(resolvedNum),
enabled: () => Boolean(resolvedClassId)
})
}
export function useSubmissionsQuery(classId: MaybeRefOrGetter<string | undefined>, assignmentNum: MaybeRefOrGetter<number>, full: MaybeRefOrGetter<boolean>): UseQueryReturnType<SubmissionsResponse, Error> {
const resolvedClassId = toValue(classId) as string;
const resolvedNum = toValue(assignmentNum);
const resolvedFull = toValue(full);
const assignmentController = new AssignmentController(resolvedClassId);
return useQuery({
queryKey: computed(() => [
'submissions',
resolvedClassId,
resolvedNum,
resolvedFull
]),
queryFn: async () => assignmentController.getSubmissions(resolvedNum, resolvedFull),
enabled: () => Boolean(resolvedClassId)
})
}

View file

@ -1,7 +1,7 @@
import {useQuery, type UseQueryReturnType} from "@tanstack/vue-query";
import {computed, type MaybeRefOrGetter, toValue} from "vue";
import type {StudentsResponse} from "@/controllers/students.ts";
import {getClassController} from "@/controllers/controllers.ts";
import {computed, type MaybeRefOrGetter, toValue} from "vue";
import {useQuery, type UseQueryReturnType} from "@tanstack/vue-query";
import type {StudentsResponse} from "@/controllers/students.ts";
const classController = getClassController();
@ -9,7 +9,7 @@ function classStudentsQueryKey(classId: string, full: boolean): [string, string,
return ["class-students", classId, full];
}
//TODO: delete and use the one in classes.ts
export function useClassStudentsQuery(
classId: MaybeRefOrGetter<string | undefined>,
full: MaybeRefOrGetter<boolean> = true,