feat: assignment query GET all en GET
This commit is contained in:
		
							parent
							
								
									802cbfb6e8
								
							
						
					
					
						commit
						3ee66d2f67
					
				
					 2 changed files with 64 additions and 10 deletions
				
			
		
							
								
								
									
										54
									
								
								frontend/src/queries/assignments.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								frontend/src/queries/assignments.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | ||||||
|  | import { AssignmentController, type AssignmentsResponse } from "@/controllers/assignments"; | ||||||
|  | import { useQuery, type UseQueryReturnType } from "@tanstack/vue-query"; | ||||||
|  | import { computed, toValue, type MaybeRefOrGetter } from "vue"; | ||||||
|  | 
 | ||||||
|  | function assignmentsQueryKey(classid: string, full: boolean) { | ||||||
|  |     return [ "assignments", classid, full ]; | ||||||
|  | } | ||||||
|  | function assignmentQueryKey(classid: string, assignmentNumber: number) { | ||||||
|  |     return [ "assignment", classid, assignmentNumber ]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function checkEnabled( | ||||||
|  |     classid: string | undefined,  | ||||||
|  |     assignmentNumber: number | undefined,  | ||||||
|  |     groupNumber: number | undefined, | ||||||
|  | ): boolean { | ||||||
|  |     return  Boolean(classid) && !isNaN(Number(groupNumber)) && !isNaN(Number(assignmentNumber)); | ||||||
|  | } | ||||||
|  | function toValues( | ||||||
|  |     classid: MaybeRefOrGetter<string | undefined>,  | ||||||
|  |     assignmentNumber: MaybeRefOrGetter<number | undefined>,  | ||||||
|  |     groupNumber: MaybeRefOrGetter<number | undefined>, | ||||||
|  |     full: MaybeRefOrGetter<boolean>, | ||||||
|  | ) { | ||||||
|  |     return { cid: toValue(classid), an: toValue(assignmentNumber), gn: toValue(groupNumber), f: toValue(full) }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function useAssignmentsQuery( | ||||||
|  |     classid: MaybeRefOrGetter<string | undefined>,  | ||||||
|  |     assignmentNumber: MaybeRefOrGetter<number | undefined>,  | ||||||
|  |     full: MaybeRefOrGetter<boolean> = true, | ||||||
|  | ): UseQueryReturnType<AssignmentsResponse, Error> { | ||||||
|  |     const { cid, an, f } = toValues(classid, assignmentNumber, 1, full); | ||||||
|  | 
 | ||||||
|  |     return useQuery({ | ||||||
|  |         queryKey: computed(() => (assignmentsQueryKey(cid!, f))), | ||||||
|  |         queryFn: async () => new AssignmentController(cid!).getAll(f), | ||||||
|  |         enabled: () => checkEnabled(cid, an, 1), | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function useAssignmentQuery( | ||||||
|  |     classid: MaybeRefOrGetter<string | undefined>,  | ||||||
|  |     assignmentNumber: MaybeRefOrGetter<number | undefined>,  | ||||||
|  |     groupNumber: MaybeRefOrGetter<number | undefined>, | ||||||
|  | ): UseQueryReturnType<AssignmentsResponse, Error> { | ||||||
|  |     const { cid, an, gn } = toValues(classid, assignmentNumber, groupNumber, true); | ||||||
|  | 
 | ||||||
|  |     return useQuery({ | ||||||
|  |         queryKey: computed(() => assignmentQueryKey(cid!, an!)), | ||||||
|  |         queryFn: async () => new AssignmentController(cid!).getByNumber(gn!), | ||||||
|  |         enabled: () => checkEnabled(cid, an, gn), | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | @ -3,11 +3,11 @@ import type { SubmissionDTO } from "@dwengo-1/common/interfaces/submission"; | ||||||
| import { useMutation, useQuery, useQueryClient, type UseMutationReturnType, type UseQueryReturnType } from "@tanstack/vue-query"; | import { 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"; | ||||||
| 
 | 
 | ||||||
| function submissionsQueryKey(classid: string, assignmentNumber: number, full: boolean) { | function submissionsQueryKey(classid: string, assignmentNumber: number, groupNumber: number, full: boolean) { | ||||||
|     return [ "submissions", classid, assignmentNumber, full ]; |     return [ "submissions", classid, assignmentNumber, groupNumber, full ]; | ||||||
| } | } | ||||||
| function submissionQueryKey(classid: string, assignmentNumber: number, groupNumber: number) { | function submissionQueryKey(classid: string, assignmentNumber: number, groupNumber: number, submissionNumber: number) { | ||||||
|     return [ "submission", classid, assignmentNumber, groupNumber ]; |     return [ "submission", classid, assignmentNumber, groupNumber, submissionNumber ]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function checkEnabled( | function checkEnabled( | ||||||
|  | @ -46,7 +46,7 @@ export function useSubmissionsQuery( | ||||||
|     const { cid, an, gn, sn, f } = toValues(classid, assignmentNumber, groupNumber, 1, full); |     const { cid, an, gn, sn, f } = toValues(classid, assignmentNumber, groupNumber, 1, full); | ||||||
| 
 | 
 | ||||||
|     return useQuery({ |     return useQuery({ | ||||||
|         queryKey: computed(() => (submissionsQueryKey(cid!, an!, f))), |         queryKey: computed(() => (submissionsQueryKey(cid!, an!, gn!, f))), | ||||||
|         queryFn: async () => new SubmissionController(cid!, an!, gn!).getAll(f), |         queryFn: async () => new SubmissionController(cid!, an!, gn!).getAll(f), | ||||||
|         enabled: () => checkEnabled(cid, an, gn, sn), |         enabled: () => checkEnabled(cid, an, gn, sn), | ||||||
|     }); |     }); | ||||||
|  | @ -60,7 +60,7 @@ export function useSubmissionQuery( | ||||||
|     const { cid, an, gn, sn, f } = toValues(classid, assignmentNumber, groupNumber, 1, true); |     const { cid, an, gn, sn, f } = toValues(classid, assignmentNumber, groupNumber, 1, true); | ||||||
| 
 | 
 | ||||||
|     return useQuery({ |     return useQuery({ | ||||||
|         queryKey: computed(() => submissionQueryKey(cid!, an!, gn!)), |         queryKey: computed(() => submissionQueryKey(cid!, an!, gn!, sn!)), | ||||||
|         queryFn: async () => new SubmissionController(cid!, an!, gn!).getByNumber(sn!), |         queryFn: async () => new SubmissionController(cid!, an!, gn!).getByNumber(sn!), | ||||||
|         enabled: () => checkEnabled(cid, an, gn, sn), |         enabled: () => checkEnabled(cid, an, gn, sn), | ||||||
|     }); |     }); | ||||||
|  | @ -79,8 +79,8 @@ export function useCreateSubmissionMutation( | ||||||
|     return useMutation({ |     return useMutation({ | ||||||
|         mutationFn: async (data) => new SubmissionController(cid!, an!, gn!).createSubmission(data), |         mutationFn: async (data) => new SubmissionController(cid!, an!, gn!).createSubmission(data), | ||||||
|         onSuccess: async () => { |         onSuccess: async () => { | ||||||
|             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, true) }); |             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, gn!, true) }); | ||||||
|             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, false) }); |             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, gn!, false) }); | ||||||
|         }, |         }, | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
|  | @ -96,8 +96,8 @@ export function useDeleteGroupMutation( | ||||||
|     return useMutation({ |     return useMutation({ | ||||||
|         mutationFn: async (id) => new SubmissionController(cid!, an!, gn!).deleteSubmission(id), |         mutationFn: async (id) => new SubmissionController(cid!, an!, gn!).deleteSubmission(id), | ||||||
|         onSuccess: async () => { |         onSuccess: async () => { | ||||||
|             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, true) }); |             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, gn!, true) }); | ||||||
|             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, false) }); |             await queryClient.invalidateQueries({ queryKey: submissionsQueryKey(cid!, an!, gn!, false) }); | ||||||
|         }, |         }, | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet