feat: class query full parameter toegevoegd aan keys

This commit is contained in:
Adriaan Jacquet 2025-04-12 18:21:43 +02:00
parent 73e3871af0
commit 363eba5745

View file

@ -7,22 +7,22 @@ import { computed, toValue, type MaybeRefOrGetter } from "vue";
const classController = new ClassController(); const classController = new ClassController();
/* Query cache keys */ /* Query cache keys */
function classesQueryKey() { function classesQueryKey(full: boolean) {
return ["classes"]; return ["classes", full];
} }
function classQueryKey(classid: string) { function classQueryKey(classid: string) {
return ["class", classid]; return ["class", classid];
} }
function classStudentsKey(classid: string) { function classStudentsKey(classid: string, full: boolean) {
return ["class-students", classid]; return ["class-students", classid, full];
} }
function classTeachersKey(classid: string) { function classTeachersKey(classid: string, full: boolean) {
return ["class-teachers", classid]; return ["class-teachers", classid, full];
} }
function classTeacherInvitationsKey(classid: string) { function classTeacherInvitationsKey(classid: string, full: boolean) {
return ["class-teacher-invitations", classid]; return ["class-teacher-invitations", classid, full];
} }
function classAssignmentsKey(classid: string) { function classAssignmentsKey(classid: string, full: boolean) {
return ["class-assignments", classid]; return ["class-assignments", classid];
} }
@ -30,16 +30,18 @@ function classAssignmentsKey(classid: string) {
async function invalidateAll(classid: string, queryClient: QueryClient): Promise<void> { async function invalidateAll(classid: string, queryClient: QueryClient): Promise<void> {
await queryClient.invalidateQueries({ queryKey: ["classes"] }); await queryClient.invalidateQueries({ queryKey: ["classes"] });
await queryClient.invalidateQueries({ queryKey: classQueryKey(classid) }); await queryClient.invalidateQueries({ queryKey: classQueryKey(classid) });
await queryClient.invalidateQueries({ queryKey: classStudentsKey(classid) }); for (let v of [true, false]) {
await queryClient.invalidateQueries({ queryKey: classTeachersKey(classid) }); await queryClient.invalidateQueries({ queryKey: classStudentsKey(classid, v) });
await queryClient.invalidateQueries({ queryKey: classAssignmentsKey(classid) }); await queryClient.invalidateQueries({ queryKey: classTeachersKey(classid, v) });
await queryClient.invalidateQueries({ queryKey: classTeacherInvitationsKey(classid) }); await queryClient.invalidateQueries({ queryKey: classAssignmentsKey(classid, v) });
await queryClient.invalidateQueries({ queryKey: classTeacherInvitationsKey(classid, v) });
}
} }
/* Queries */ /* Queries */
export function useClassesQuery(full: MaybeRefOrGetter<boolean> = true): UseQueryReturnType<ClassesResponse, Error> { export function useClassesQuery(full: MaybeRefOrGetter<boolean> = true): UseQueryReturnType<ClassesResponse, Error> {
return useQuery({ return useQuery({
queryKey: computed(() => (classesQueryKey())), queryKey: computed(() => (classesQueryKey(toValue(full)))),
queryFn: async () => classController.getAll(toValue(full)), queryFn: async () => classController.getAll(toValue(full)),
}); });
} }
@ -60,7 +62,8 @@ export function useCreateClassMutation(): UseMutationReturnType<ClassResponse, E
return useMutation({ return useMutation({
mutationFn: async (data) => classController.createClass(data), mutationFn: async (data) => classController.createClass(data),
onSuccess: async () => { onSuccess: async () => {
await queryClient.invalidateQueries({ queryKey: ["classes"] }); await queryClient.invalidateQueries({ queryKey: classesQueryKey(true) });
await queryClient.invalidateQueries({ queryKey: classesQueryKey(false) });
}, },
}); });
} }
@ -92,7 +95,7 @@ export function useClassStudentsQuery(
full: MaybeRefOrGetter<boolean> = true full: MaybeRefOrGetter<boolean> = true
): UseQueryReturnType<StudentsResponse, Error> { ): UseQueryReturnType<StudentsResponse, Error> {
return useQuery({ return useQuery({
queryKey: computed(() => classStudentsKey(toValue(id)!)), queryKey: computed(() => classStudentsKey(toValue(id)!, toValue(full))),
queryFn: async () => classController.getStudents(toValue(id)!, toValue(full)!), queryFn: async () => classController.getStudents(toValue(id)!, toValue(full)!),
enabled: () => Boolean(toValue(id)), enabled: () => Boolean(toValue(id)),
}) })
@ -105,7 +108,8 @@ export function useClassAddStudentMutation(): UseMutationReturnType<ClassRespons
mutationFn: async ({ id, username }) => classController.addStudent(id, username), mutationFn: async ({ id, username }) => classController.addStudent(id, username),
onSuccess: async (data) => { onSuccess: async (data) => {
await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) });
await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, true) });
await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, false) });
}, },
}); });
} }
@ -117,7 +121,8 @@ export function useClassDeleteStudentMutation(): UseMutationReturnType<ClassResp
mutationFn: async ({ id, username }) => classController.deleteStudent(id, username), mutationFn: async ({ id, username }) => classController.deleteStudent(id, username),
onSuccess: async (data) => { onSuccess: async (data) => {
await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) });
await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, true) });
await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, false) });
}, },
}); });
} }
@ -127,7 +132,7 @@ export function useClassTeachersQuery(
full: MaybeRefOrGetter<boolean> = true full: MaybeRefOrGetter<boolean> = true
): UseQueryReturnType<StudentsResponse, Error> { ): UseQueryReturnType<StudentsResponse, Error> {
return useQuery({ return useQuery({
queryKey: computed(() => classTeachersKey(toValue(id)!)), queryKey: computed(() => classTeachersKey(toValue(id)!, toValue(full))),
queryFn: async () => classController.getTeachers(toValue(id)!, toValue(full)!), queryFn: async () => classController.getTeachers(toValue(id)!, toValue(full)!),
enabled: () => Boolean(toValue(id)), enabled: () => Boolean(toValue(id)),
}); });
@ -140,7 +145,8 @@ export function useClassAddTeacherMutation(): UseMutationReturnType<ClassRespons
mutationFn: async ({ id, username }) => classController.addTeacher(id, username), mutationFn: async ({ id, username }) => classController.addTeacher(id, username),
onSuccess: async (data) => { onSuccess: async (data) => {
await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) });
await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, true) });
await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, false) });
}, },
}); });
} }
@ -152,7 +158,8 @@ export function useClassDeleteTeacherMutation(): UseMutationReturnType<ClassResp
mutationFn: async ({ id, username }) => classController.deleteTeacher(id, username), mutationFn: async ({ id, username }) => classController.deleteTeacher(id, username),
onSuccess: async (data) => { onSuccess: async (data) => {
await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) });
await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id) }); await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, true) });
await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, false) });
}, },
}); });
} }
@ -162,7 +169,7 @@ export function useClassTeacherInvitationsQuery(
full: MaybeRefOrGetter<boolean> = true full: MaybeRefOrGetter<boolean> = true
): UseQueryReturnType<StudentsResponse, Error> { ): UseQueryReturnType<StudentsResponse, Error> {
return useQuery({ return useQuery({
queryKey: computed(() => classTeacherInvitationsKey(toValue(id)!)), queryKey: computed(() => classTeacherInvitationsKey(toValue(id)!, toValue(full))),
queryFn: async () => classController.getTeacherInvitations(toValue(id)!, toValue(full)!), queryFn: async () => classController.getTeacherInvitations(toValue(id)!, toValue(full)!),
enabled: () => Boolean(toValue(id)), enabled: () => Boolean(toValue(id)),
}); });
@ -173,7 +180,7 @@ export function useClassAssignmentsQuery(
full: MaybeRefOrGetter<boolean> = true full: MaybeRefOrGetter<boolean> = true
): UseQueryReturnType<StudentsResponse, Error> { ): UseQueryReturnType<StudentsResponse, Error> {
return useQuery({ return useQuery({
queryKey: computed(() => classAssignmentsKey(toValue(id)!)), queryKey: computed(() => classAssignmentsKey(toValue(id)!, toValue(full))),
queryFn: async () => classController.getAssignments(toValue(id)!, toValue(full)!), queryFn: async () => classController.getAssignments(toValue(id)!, toValue(full)!),
enabled: () => Boolean(toValue(id)), enabled: () => Boolean(toValue(id)),
}); });