From 815858d02f0d80e06155435f44cb78b567c4b2cf Mon Sep 17 00:00:00 2001 From: Gabriellvl Date: Sat, 29 Mar 2025 20:40:24 +0100 Subject: [PATCH] feat: student join req query --- frontend/src/queries/students.ts | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/frontend/src/queries/students.ts b/frontend/src/queries/students.ts index 15264191..47ff73a0 100644 --- a/frontend/src/queries/students.ts +++ b/frontend/src/queries/students.ts @@ -13,6 +13,8 @@ const STUDENT_ASSIGNMENTS_QUERY_KEY = (username: string, full: boolean) => ['stu const STUDENT_GROUPS_QUERY_KEY = (username: string, full: boolean) => ['student-groups', username, full]; const STUDENT_SUBMISSIONS_QUERY_KEY = (username: string) => ['student-submissions', username]; const STUDENT_QUESTIONS_QUERY_KEY = (username: string, full: boolean) => ['student-questions', username, full]; +const STUDENT_JOIN_REQUESTS_QUERY_KEY = (username: string) => ["student-join-requests", username]; + export function useStudentsQuery(full: MaybeRefOrGetter = true) { return useQuery({ @@ -100,5 +102,50 @@ export function useDeleteStudentMutation() { }); } +export function useStudentJoinRequestsQuery(username: MaybeRefOrGetter) { + return useQuery({ + queryKey: computed(() => STUDENT_JOIN_REQUESTS_QUERY_KEY(toValue(username)!)), + queryFn: () => studentController.getJoinRequests(toValue(username)!), + enabled: () => !!toValue(username), + }); +} + +/** + * Mutation to create a join request for a class + */ +export function useCreateJoinRequestMutation() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ username, classId }: { username: string; classId: string }) => + studentController.createJoinRequest(username, classId), + onSuccess: (_, { username }) => { + await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUESTS_QUERY_KEY(username) }); + }, + onError: (err) => { + alert("Create join request failed:", err); + }, + }); +} + +/** + * Mutation to delete a join request for a class + */ +export function useDeleteJoinRequestMutation() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ username, classId }: { username: string; classId: string }) => + studentController.deleteJoinRequest(username, classId), + onSuccess: (_, { username }) => { + await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUESTS_QUERY_KEY(username) }); + }, + onError: (err) => { + alert("Delete join request failed:", err); + }, + }); +} + +