feat: class query get, delete, put geimplementeerd
This commit is contained in:
parent
a2ae431957
commit
45a36a94a5
1 changed files with 44 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
||||||
import { ClassController, type ClassesResponse, type ClassResponse } from "@/controllers/classes";
|
import { ClassController, type ClassesResponse, type ClassResponse } from "@/controllers/classes";
|
||||||
import type { StudentsResponse } from "@/controllers/students";
|
import type { StudentsResponse } from "@/controllers/students";
|
||||||
import { useQuery, type UseQueryReturnType } from "@tanstack/vue-query";
|
import type { ClassDTO } from "@dwengo-1/common/interfaces/class";
|
||||||
|
import { QueryClient, useMutation, useQuery, useQueryClient, type UseMutationReturnType, type UseQueryReturnType } from "@tanstack/vue-query";
|
||||||
import { computed, toValue, type MaybeRefOrGetter } from "vue";
|
import { computed, toValue, type MaybeRefOrGetter } from "vue";
|
||||||
|
|
||||||
const classController = new ClassController();
|
const classController = new ClassController();
|
||||||
|
@ -24,6 +25,15 @@ function classAssignmentsKey(classid: string) {
|
||||||
return ["class-assignments", classid];
|
return ["class-assignments", classid];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function invalidateAll(classid: string, queryClient: QueryClient): Promise<void> {
|
||||||
|
await queryClient.invalidateQueries({ queryKey: ["classes"] });
|
||||||
|
await queryClient.invalidateQueries({ queryKey: classQueryKey(classid) });
|
||||||
|
await queryClient.invalidateQueries({ queryKey: classStudentsKey(classid) });
|
||||||
|
await queryClient.invalidateQueries({ queryKey: classTeachersKey(classid) });
|
||||||
|
await queryClient.invalidateQueries({ queryKey: classAssignmentsKey(classid) });
|
||||||
|
await queryClient.invalidateQueries({ queryKey: classTeacherInvitationsKey(classid) });
|
||||||
|
}
|
||||||
|
|
||||||
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())),
|
||||||
|
@ -41,6 +51,39 @@ export function useClassQuery(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function useCreateClassMutation(): UseMutationReturnType<ClassResponse, Error, ClassDTO, unknown> {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async (data) => classController.createClass(data),
|
||||||
|
onSuccess: async () => {
|
||||||
|
await queryClient.invalidateQueries({ queryKey: ["classes"] });
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useDeleteClassMutation(): UseMutationReturnType<ClassResponse, Error, string, unknown> {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async (id) => classController.deleteClass(id),
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
await invalidateAll(data.class.id, queryClient);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useUpdateClassMutation(): UseMutationReturnType<ClassResponse, Error, ClassDTO, unknown> {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async (data) => classController.updateClass(data.id, data),
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
await invalidateAll(data.class.id, queryClient);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function useClassStudentsQuery(
|
export function useClassStudentsQuery(
|
||||||
id: MaybeRefOrGetter<string | undefined>,
|
id: MaybeRefOrGetter<string | undefined>,
|
||||||
full: MaybeRefOrGetter<boolean> = true
|
full: MaybeRefOrGetter<boolean> = true
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue