import { useMutation, useQueryClient } from "@tanstack/react-query"; import { ApiResponse } from "@/types/api-response"; import { authService } from "./service"; import { LoginDto, RegisterDto, RefreshTokenDto, AuthResponse } from "./types"; export const AuthQueryKeys = { all: ["auth"] as const, session: () => [...AuthQueryKeys.all, "session"] as const, }; export function useLogin() { const queryClient = useQueryClient(); const { data, ...rest } = useMutation< ApiResponse, Error, LoginDto >({ mutationFn: (credentials: LoginDto) => authService.login(credentials), onSuccess: () => { queryClient.invalidateQueries({ queryKey: AuthQueryKeys.session() }); }, }); return { data: data?.data, ...rest }; } export function useRegister() { const { data, ...rest } = useMutation< ApiResponse, Error, RegisterDto >({ mutationFn: (userData: RegisterDto) => authService.register(userData), }); return { data: data?.data, ...rest }; } export function useRefreshToken() { const { data, ...rest } = useMutation< ApiResponse, Error, RefreshTokenDto >({ mutationFn: (tokenData: RefreshTokenDto) => authService.refreshToken(tokenData), }); return { data: data?.data, ...rest }; } export function useLogout() { const queryClient = useQueryClient(); const { data, ...rest } = useMutation, Error, void>({ mutationFn: () => authService.logout(), onSuccess: () => { queryClient.clear(); }, }); return { data: data?.data, ...rest }; }