feat: student query
This commit is contained in:
parent
c84964e719
commit
70d4c80093
5 changed files with 103 additions and 3 deletions
|
@ -1 +0,0 @@
|
|||
export const API_BASE = "http://localhost:3000/api";
|
|
@ -1,5 +1,5 @@
|
|||
import { StudentController } from "@/controllers/student-controller.ts";
|
||||
import { TeacherController } from "@/controllers/teacher-controller.ts";
|
||||
import { StudentController } from "@/controllers/students.ts";
|
||||
import { TeacherController } from "@/controllers/teachers.ts";
|
||||
|
||||
import {ThemeController} from "@/controllers/themes.ts";
|
||||
|
||||
|
|
101
frontend/src/queries/students.ts
Normal file
101
frontend/src/queries/students.ts
Normal file
|
@ -0,0 +1,101 @@
|
|||
import { computed, toValue } from "vue";
|
||||
import type { MaybeRefOrGetter } from "vue";
|
||||
import { useQuery } from "@tanstack/vue-query";
|
||||
import { getStudentController } from "@/controllers/controllers.ts";
|
||||
|
||||
const studentController = getStudentController();
|
||||
|
||||
/** 🔑 Query keys */
|
||||
const STUDENTS_QUERY_KEY = (full: boolean) => ['students', full];
|
||||
const STUDENT_QUERY_KEY = (username: string) => ['student', username];
|
||||
const STUDENT_CLASSES_QUERY_KEY = (username: string, full: boolean) => ['student-classes', username, full];
|
||||
const STUDENT_ASSIGNMENTS_QUERY_KEY = (username: string, full: boolean) => ['student-assignments', username, full];
|
||||
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];
|
||||
|
||||
export function useStudentsQuery(full: MaybeRefOrGetter<boolean> = true) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENTS_QUERY_KEY(toValue(full))),
|
||||
queryFn: () => studentController.getAll(toValue(full)),
|
||||
});
|
||||
}
|
||||
|
||||
export function useStudentQuery(username: MaybeRefOrGetter<string | undefined>) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENT_QUERY_KEY(toValue(username)!)),
|
||||
queryFn: () => studentController.getByUsername(toValue(username)!),
|
||||
enabled: () => !!toValue(username),
|
||||
});
|
||||
}
|
||||
|
||||
export function useStudentClassesQuery(username: MaybeRefOrGetter<string | undefined>, full: MaybeRefOrGetter<boolean> = true) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENT_CLASSES_QUERY_KEY(toValue(username)!, toValue(full))),
|
||||
queryFn: () => studentController.getClasses(toValue(username)!, toValue(full)),
|
||||
enabled: () => !!toValue(username),
|
||||
});
|
||||
}
|
||||
|
||||
export function useStudentAssignmentsQuery(username: MaybeRefOrGetter<string | undefined>, full: MaybeRefOrGetter<boolean> = true) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENT_ASSIGNMENTS_QUERY_KEY(toValue(username)!, toValue(full))),
|
||||
queryFn: () => studentController.getAssignments(toValue(username)!, toValue(full)),
|
||||
enabled: () => !!toValue(username),
|
||||
});
|
||||
}
|
||||
|
||||
export function useStudentGroupsQuery(username: MaybeRefOrGetter<string | undefined>, full: MaybeRefOrGetter<boolean> = true) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENT_GROUPS_QUERY_KEY(toValue(username)!, toValue(full))),
|
||||
queryFn: () => studentController.getGroups(toValue(username)!, toValue(full)),
|
||||
enabled: () => !!toValue(username),
|
||||
});
|
||||
}
|
||||
|
||||
export function useStudentSubmissionsQuery(username: MaybeRefOrGetter<string | undefined>) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENT_SUBMISSIONS_QUERY_KEY(toValue(username)!)),
|
||||
queryFn: () => studentController.getSubmissions(toValue(username)!),
|
||||
enabled: () => !!toValue(username),
|
||||
});
|
||||
}
|
||||
|
||||
export function useStudentQuestionsQuery(username: MaybeRefOrGetter<string | undefined>, full: MaybeRefOrGetter<boolean> = true) {
|
||||
return useQuery({
|
||||
queryKey: computed(() => STUDENT_QUESTIONS_QUERY_KEY(toValue(username)!, toValue(full))),
|
||||
queryFn: () => studentController.getQuestions(toValue(username)!, toValue(full)),
|
||||
enabled: () => !!toValue(username),
|
||||
});
|
||||
}
|
||||
|
||||
export function useCreateStudentMutation() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (data: any) => studentController.createStudent(data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['students'] });
|
||||
},
|
||||
onError: (err) => {
|
||||
alert("Create student failed:", err);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// TODO
|
||||
// setquerydata
|
||||
// previous students
|
||||
export function useDeleteStudentMutation() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (username: string) => studentController.deleteStudent(username),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['students'] });
|
||||
},
|
||||
onError: (err) => {
|
||||
alert("Delete student failed:", err);
|
||||
},
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue