43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
|
|
import { useQuery } from "@tanstack/react-query";
|
||
|
|
import { createClient } from "@/utils/supabase/client";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* [사용자 정보 조회 쿼리]
|
||
|
|
*
|
||
|
|
* 현재 로그인한 사용자의 정보를 조회합니다.
|
||
|
|
* - 자동 캐싱 및 재검증
|
||
|
|
* - 로딩/에러 상태 자동 관리
|
||
|
|
*
|
||
|
|
* @example
|
||
|
|
* ```tsx
|
||
|
|
* import { useUserQuery } from '@/hooks/queries/use-user-query';
|
||
|
|
*
|
||
|
|
* function Profile() {
|
||
|
|
* const { data: user, isLoading, error } = useUserQuery();
|
||
|
|
*
|
||
|
|
* if (isLoading) return <div>Loading...</div>;
|
||
|
|
* if (error) return <div>Error: {error.message}</div>;
|
||
|
|
* if (!user) return <div>Not logged in</div>;
|
||
|
|
*
|
||
|
|
* return <div>Welcome, {user.email}</div>;
|
||
|
|
* }
|
||
|
|
* ```
|
||
|
|
*/
|
||
|
|
export function useUserQuery() {
|
||
|
|
return useQuery({
|
||
|
|
queryKey: ["user"],
|
||
|
|
queryFn: async () => {
|
||
|
|
const supabase = createClient();
|
||
|
|
const {
|
||
|
|
data: { user },
|
||
|
|
error,
|
||
|
|
} = await supabase.auth.getUser();
|
||
|
|
|
||
|
|
if (error) throw error;
|
||
|
|
return user;
|
||
|
|
},
|
||
|
|
staleTime: 5 * 60 * 1000, // 5분 - 사용자 정보는 자주 변경되지 않음
|
||
|
|
retry: 1,
|
||
|
|
});
|
||
|
|
}
|