import { ClassController, type ClassesResponse, type ClassResponse } from "@/controllers/classes"; import type { StudentsResponse } from "@/controllers/students"; import { useQuery, type UseQueryReturnType } from "@tanstack/vue-query"; import { computed, toValue, type MaybeRefOrGetter } from "vue"; const classController = new ClassController(); function classesQueryKey() { return ["classes"]; } function classQueryKey(classid: string) { return ["class", classid]; } function classStudentsKey(classid: string) { return ["class-students", classid]; } function classTeachersKey(classid: string) { return ["class-teachers", classid]; } function classTeacherInvitationsKey(classid: string) { return ["class-teacher-invitations", classid]; } export function useClassesQuery(full: MaybeRefOrGetter = true): UseQueryReturnType { return useQuery({ queryKey: computed(() => (classesQueryKey())), queryFn: async () => classController.getAll(toValue(full)), }); } export function useClassQuery( id: MaybeRefOrGetter, ): UseQueryReturnType { return useQuery({ queryKey: computed(() => classQueryKey(toValue(id)!)), queryFn: async () => classController.getById(toValue(id)!), enabled: () => Boolean(toValue(id)), }); } export function useClassStudentsQuery( id: MaybeRefOrGetter, full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ queryKey: computed(() => classStudentsKey(toValue(id)!)), queryFn: async () => classController.getStudents(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), }) } export function useClassTeachersQuery( id: MaybeRefOrGetter, full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ queryKey: computed(() => classTeachersKey(toValue(id)!)), queryFn: async () => classController.getTeachers(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), }); } export function useClassTeacherInvitationsQuery( id: MaybeRefOrGetter, full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ queryKey: computed(() => classTeacherInvitationsKey(toValue(id)!)), queryFn: async () => classController.getTeacherInvitations(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), }); }