fix: extra invalidate queries bij delete en put

This commit is contained in:
Gabriellvl 2025-04-02 14:21:54 +02:00
parent 075616b67b
commit dadde1651b
4 changed files with 21 additions and 28 deletions

View file

@ -5,7 +5,7 @@ import type {ClassesResponse} from "@/controllers/classes.ts";
import type {TeacherDTO} from "dwengo-1-common/src/interfaces/teacher";
export interface TeachersResponse { teachers: TeacherDTO[] | string[] }
export interface TeacherResponse { teacher: TeacherDTO | string }
export interface TeacherResponse { teacher: TeacherDTO }
export class TeacherController extends BaseController {

View file

@ -45,10 +45,10 @@ function STUDENT_SUBMISSIONS_QUERY_KEY(username: string): [string, string] {
function STUDENT_QUESTIONS_QUERY_KEY(username: string, full: boolean): [string, string, boolean] {
return ["student-questions", username, full];
}
function STUDENT_JOIN_REQUESTS_QUERY_KEY(username: string): [string, string] {
export function STUDENT_JOIN_REQUESTS_QUERY_KEY(username: string): [string, string] {
return ["student-join-requests", username];
}
function STUDENT_JOIN_REQUEST_QUERY_KEY(username: string, classId: string): [string, string, string] {
export function STUDENT_JOIN_REQUEST_QUERY_KEY(username: string, classId: string): [string, string, string] {
return ["student-join-request", username, classId];
}
@ -172,8 +172,9 @@ export function useDeleteStudentMutation(): UseMutationReturnType<
return useMutation({
mutationFn: async (username) => studentController.deleteStudent(username),
onSuccess: async () => {
onSuccess: async (deletedUser) => {
await queryClient.invalidateQueries({ queryKey: ["students"] });
await queryClient.invalidateQueries({ queryKey: STUDENT_QUERY_KEY(deletedUser.student.username) });
},
});
}
@ -188,8 +189,8 @@ export function useCreateJoinRequestMutation(): UseMutationReturnType<
return useMutation({
mutationFn: async ({ username, classId }) => studentController.createJoinRequest(username, classId),
onSuccess: async ({ username }) => {
await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUESTS_QUERY_KEY(username) });
onSuccess: async (newJoinRequest) => {
await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUESTS_QUERY_KEY(newJoinRequest.request.requester) });
},
});
}
@ -204,8 +205,11 @@ export function useDeleteJoinRequestMutation(): UseMutationReturnType<
return useMutation({
mutationFn: async ({ username, classId }) => studentController.deleteJoinRequest(username, classId),
onSuccess: async ({ username }) => {
onSuccess: async (deletedJoinRequest) => {
const username = deletedJoinRequest.request.requester;
const classId = deletedJoinRequest.request.class;
await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUESTS_QUERY_KEY(username) });
await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUEST_QUERY_KEY(username, classId) });
},
});
}

View file

@ -8,17 +8,11 @@ import {
UseQueryReturnType,
} from "@tanstack/vue-query";
import {TeacherController, type TeacherResponse, type TeachersResponse} from "@/controllers/teachers.ts";
import type {
TeacherDTO,
ClassDTO,
StudentDTO,
QuestionDTO,
QuestionId,
JoinRequestDTO,
} from "dwengo-1-common/src/interfaces";
import type {ClassesResponse} from "@/controllers/classes.ts";
import type {JoinRequestResponse, JoinRequestsResponse, StudentsResponse} from "@/controllers/students.ts";
import type {QuestionsResponse} from "@/controllers/questions.ts"; // pas dit aan naar jouw pad indien nodig
import type {QuestionsResponse} from "@/controllers/questions.ts";
import type {TeacherDTO} from "dwengo-1-common/src/interfaces/teacher";
import {STUDENT_JOIN_REQUEST_QUERY_KEY, STUDENT_JOIN_REQUESTS_QUERY_KEY} from "@/queries/students.ts";
const teacherController = new TeacherController();
@ -133,8 +127,9 @@ export function useDeleteTeacherMutation(): UseMutationReturnType<
return useMutation({
mutationFn: (username: string) => teacherController.deleteTeacher(username),
onSuccess: async () => {
onSuccess: async (deletedTeacher) => {
await queryClient.invalidateQueries({ queryKey: ["teachers"] });
await queryClient.invalidateQueries({ queryKey: TEACHER_QUERY_KEY(deletedTeacher.teacher.username) });
},
});
}
@ -150,11 +145,11 @@ export function useUpdateJoinRequestMutation(): UseMutationReturnType<
return useMutation({
mutationFn: ({ teacherUsername, classId, studentUsername, accepted }) =>
teacherController.updateStudentJoinRequest(teacherUsername, classId, studentUsername, accepted),
onSuccess: async (_, { teacherUsername, classId }) => {
await queryClient.invalidateQueries({
queryKey: JOIN_REQUESTS_QUERY_KEY(teacherUsername, classId),
// TODO
});
onSuccess: async (deletedJoinRequest) => {
const username = deletedJoinRequest.request.requester;
const classId = deletedJoinRequest.request.class;
await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUESTS_QUERY_KEY(username) });
await queryClient.invalidateQueries({ queryKey: STUDENT_JOIN_REQUEST_QUERY_KEY(username, classId) });
},
});
}