import { RaidInstance } from "@/interface/RaidInstance"; import { RaidInstancePersonCharacterXref } from "@/interface/RaidInstancePersonCharacterXref"; import { api } from "@/util/AxiosUtil"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; export function useGetRaidInstance(raidInstanceId: string, raidGroupId: string){ return useQuery({ queryKey: ["raidInstances", raidInstanceId, raidGroupId], queryFn: async () => { const response = await api.get(`/raidGroup/${raidGroupId}/raidInstance/${raidInstanceId}`); if(response.status !== 200){ throw new Error("Failed to get raid instance"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } return response.data as RaidInstance; }, enabled: !!raidInstanceId && !!raidGroupId }); } export function useGetRaidInstancesByRaidGroup(raidGroupId: string, page: number, pageSize: number, searchTerm?: string){ return useQuery({ queryKey: ["raidInstances", raidGroupId, {page, pageSize, searchTerm}], queryFn: async () => { const params = new URLSearchParams(); params.append("page", page.toString()); params.append("pageSize", pageSize.toString()); if(searchTerm){ params.append("searchTerm", searchTerm); } const response = await api.get(`/raidGroup/${raidGroupId}/raidInstance?${params}`); if(response.status !== 200){ throw new Error("Failed to get accounts"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } return response.data as RaidInstance[]; } }); } export function useGetRaidInstancesByRaidGroupCount(raidGroupId: string, searchTerm?: string){ return useQuery({ queryKey: ["raidInstances", raidGroupId, "count", {searchTerm}], queryFn: async () => { const params = new URLSearchParams(); if(searchTerm){ params.append("searchTerm", searchTerm); } const response = await api.get(`/raidGroup/${raidGroupId}/raidInstance/count?${params}`); if(response.status !== 200){ throw new Error("Failed to get accounts"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } return response.data.count as number; } }); } export function useCreateRaidInstance(raidGroupId: string){ const queryClient = useQueryClient(); return useMutation({ mutationKey: ["createRaidInstance", raidGroupId], mutationFn: async (raidInstance: RaidInstance) => { console.log("raidInstance2", raidInstance); const response = await api.post(`/raidGroup/${raidGroupId}/raidInstance`, raidInstance); if(response.status !== 200){ throw new Error("Failed to create raid instance"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } return response.data.raidInstanceId as string; }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["raidInstances"] }); } }); } export function useUpdateRaidInstance(raidGroupId: string){ const queryClient = useQueryClient(); return useMutation({ mutationKey: ["updateRaidInstance", raidGroupId], mutationFn: async (raidInstance: RaidInstance) => { const response = await api.put(`/raidGroup/${raidGroupId}/raidInstance/${raidInstance.raidInstanceId}`, raidInstance); if(response.status !== 200){ throw new Error("Failed to update raid instance"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["raidInstances"] }); } }); } export function useUpdateRaidInstanceNoInvalidation(raidGroupId: string){ return useMutation({ mutationKey: ["updateRaidInstance", raidGroupId], mutationFn: async (raidInstance: RaidInstance) => { const response = await api.put(`/raidGroup/${raidGroupId}/raidInstance/${raidInstance.raidInstanceId}`, raidInstance); if(response.status !== 200){ throw new Error("Failed to update raid instance"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } } }); } export function useDeleteRaidInstance(raidGroupId: string, raidInstanceId: string){ const queryClient = useQueryClient(); return useMutation({ mutationKey: ["deleteRaidInstance", raidGroupId, raidInstanceId], mutationFn: async () => { const response = await api.delete(`/raidGroup/${raidGroupId}/raidInstance/${raidInstanceId}`); if(response.status !== 200){ throw new Error("Failed to delete raid instance"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["raidInstances"] }); } }); } export function useGetRaidInstancePersonCharacterXrefs(raidGroupId?: string, raidInstanceId?: string){ return useQuery({ queryKey: ["raidInstancePersonCharacterXrefs", raidGroupId, raidInstanceId], queryFn: async () => { const response = await api.get(`/raidGroup/${raidGroupId}/raidInstance/${raidInstanceId}/personCharacterXref`); if(response.status !== 200){ throw new Error("Failed to get raid instance person character xrefs"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } return response.data as RaidInstancePersonCharacterXref[]; }, enabled: !!raidGroupId && !!raidInstanceId }); } export function useUpdateRaidInstancePersonCharacterXrefs(raidGroupId?: string, raidInstanceId?: string){ const queryClient = useQueryClient(); return useMutation({ mutationKey: ["updateRaidInstancePersonCharacterXrefs", raidGroupId, raidInstanceId], mutationFn: async (raidInstancePersonCharacterXrefs: RaidInstancePersonCharacterXref[]) => { const response = await api.post(`/raidGroup/${raidGroupId}/raidInstance/${raidInstanceId}/personCharacterXref`, raidInstancePersonCharacterXrefs); if(response.status !== 200){ throw new Error("Failed to update raid instance person character xrefs"); } else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["raidInstancePersonCharacterXrefs", raidGroupId, raidInstanceId] }); } }); }