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 | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet