Add supabase functionality test
This commit adds a test to verify that Supabase is functioning correctly.
This commit is contained in:
126
src/utils/supabaseTest.ts
Normal file
126
src/utils/supabaseTest.ts
Normal file
@@ -0,0 +1,126 @@
|
||||
|
||||
import { supabase } from '@/lib/supabase';
|
||||
import { toast } from '@/components/ui/use-toast';
|
||||
|
||||
/**
|
||||
* Supabase 연결 테스트
|
||||
* 현재 Supabase 연결 상태를 확인합니다.
|
||||
*/
|
||||
export const testSupabaseConnection = async (): Promise<{ success: boolean; message: string }> => {
|
||||
try {
|
||||
// 서버에 핑 보내기
|
||||
const { data, error } = await supabase.from('_ping').select('*').limit(1);
|
||||
|
||||
if (error) {
|
||||
console.error('Supabase 연결 테스트 실패:', error);
|
||||
return {
|
||||
success: false,
|
||||
message: `연결 오류: ${error.message}`
|
||||
};
|
||||
}
|
||||
|
||||
// 사용자 세션 확인
|
||||
const { data: userData, error: userError } = await supabase.auth.getUser();
|
||||
const isLoggedIn = userData?.user !== null;
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: `Supabase 연결 성공! 로그인 상태: ${isLoggedIn ? '로그인됨' : '로그인 필요'}`
|
||||
};
|
||||
} catch (err) {
|
||||
const error = err as Error;
|
||||
console.error('Supabase 테스트 중 예외 발생:', error);
|
||||
return {
|
||||
success: false,
|
||||
message: `예외 발생: ${error.message}`
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 사용자 인터페이스에서 Supabase 연결 테스트를 실행
|
||||
* 결과를 토스트 메시지로 표시합니다.
|
||||
*/
|
||||
export const runSupabaseConnectionTest = async () => {
|
||||
toast({
|
||||
title: "Supabase 연결 테스트",
|
||||
description: "연결 상태를 확인 중입니다...",
|
||||
});
|
||||
|
||||
const result = await testSupabaseConnection();
|
||||
|
||||
if (result.success) {
|
||||
toast({
|
||||
title: "연결 성공",
|
||||
description: result.message,
|
||||
});
|
||||
} else {
|
||||
toast({
|
||||
title: "연결 실패",
|
||||
description: result.message,
|
||||
variant: "destructive"
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Supabase 테이블 구조 확인
|
||||
* 지정된 테이블이 존재하는지 확인합니다.
|
||||
*/
|
||||
export const checkSupabaseTables = async (): Promise<{ exists: boolean; tables: string[] }> => {
|
||||
try {
|
||||
// 현재 스키마의 테이블 목록 가져오기
|
||||
const { data, error } = await supabase
|
||||
.from('pg_tables')
|
||||
.select('tablename')
|
||||
.eq('schemaname', 'public');
|
||||
|
||||
if (error) {
|
||||
console.error('테이블 확인 오류:', error);
|
||||
return { exists: false, tables: [] };
|
||||
}
|
||||
|
||||
const tables = data?.map(table => table.tablename) || [];
|
||||
|
||||
// 필요한 테이블이 있는지 확인
|
||||
const requiredTables = ['transactions', 'budgets', 'category_budgets'];
|
||||
const missingTables = requiredTables.filter(table => !tables.includes(table));
|
||||
|
||||
return {
|
||||
exists: missingTables.length === 0,
|
||||
tables
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('테이블 확인 중 오류 발생:', error);
|
||||
return { exists: false, tables: [] };
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Supabase 환경 설정 확인
|
||||
* 환경 변수가 올바르게 설정되었는지 확인합니다.
|
||||
*/
|
||||
export const checkSupabaseEnvironment = (): { valid: boolean; message: string } => {
|
||||
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
|
||||
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
|
||||
|
||||
if (!supabaseUrl || !supabaseAnonKey) {
|
||||
return {
|
||||
valid: false,
|
||||
message: '환경 변수가 설정되지 않았습니다.'
|
||||
};
|
||||
}
|
||||
|
||||
if (supabaseUrl.includes('YOUR_SUPABASE_URL') ||
|
||||
supabaseAnonKey.includes('YOUR_SUPABASE_ANON_KEY')) {
|
||||
return {
|
||||
valid: false,
|
||||
message: '환경 변수가 기본값으로 설정되어 있습니다.'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
valid: true,
|
||||
message: '환경 변수가 올바르게 설정되었습니다.'
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user