Remove offline mode option

This commit removes the offline mode functionality and focuses on resolving server-side issues.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-15 13:20:51 +00:00
parent 4f8b1c0189
commit 5853e5f51b
4 changed files with 145 additions and 50 deletions

View File

@@ -9,9 +9,15 @@ export const showAuthToast = (title: string, description: string, variant: 'defa
// 에러 메시지 처리 유틸리티 함수
export const handleNetworkError = (error: any): string => {
return error.message && error.message.includes('fetch')
? '서버 연결에 실패했습니다. 네트워크 연결을 확인해주세요.'
: (error.message || '예상치 못한 오류가 발생했습니다.');
if (error.message && error.message.includes('fetch')) {
return '서버 연결에 실패했습니다. 네트워크 연결을 확인해주세요.';
} else if (error.message && error.message.includes('CORS')) {
return 'CORS 오류가 발생했습니다. 서버 설정 또는 CORS 프록시를 확인하세요.';
} else if (error.message && error.message.includes('NetworkError')) {
return '네트워크 오류가 발생했습니다. 인터넷 연결을 확인하세요.';
}
return error.message || '예상치 못한 오류가 발생했습니다.';
};
// 응답 파싱 유틸리티 함수
@@ -60,23 +66,98 @@ export const hasCorsIssue = (error: any): boolean => {
);
};
// 오프라인 모드 확인
export const isOfflineMode = (): boolean => {
return !navigator.onLine || localStorage.getItem('offline_mode') === 'true';
// Supabase 연결 상태 확인
export const checkSupabaseConnection = async (): Promise<boolean> => {
try {
const { data, error } = await supabase.auth.getSession();
// 오류가 없으면 연결 성공
if (!error) {
return true;
}
// 오류 메시지 확인
if (error.message && (
error.message.includes('Failed to fetch') ||
error.message.includes('Network') ||
error.message.includes('CORS')
)) {
return false;
}
// 다른 오류는 연결은 됐지만 세션/인증 관련 오류이므로 연결은 성공
return true;
} catch (err) {
console.error('Supabase 연결 확인 중 오류:', err);
return false;
}
};
// 데모 모드 사용자 생성 (오프라인 환경용)
export const createDemoUser = (email: string, username: string) => {
// 데모용 가상 사용자 정보
const demoUser = {
id: 'demo-' + Date.now(),
email,
user_metadata: { username },
created_at: new Date().toISOString()
};
// 로컬 스토리지에 저장
localStorage.setItem('demo_user', JSON.stringify(demoUser));
return demoUser;
// 서버 연결 상태 검사
export const verifyServerConnection = async (): Promise<{
connected: boolean;
message: string;
}> => {
try {
const start = Date.now();
// Supabase URL 가져오기
const supabaseUrl = localStorage.getItem('supabase_url') || 'http://a11.ism.kr:8000';
// 단순 헬스 체크 요청
const response = await fetch(`${supabaseUrl}/rest/v1/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const elapsed = Date.now() - start;
if (response.ok || response.status === 401) {
// 401도 서버가 응답했다는 의미이므로 연결 성공으로 간주
return {
connected: true,
message: `서버 연결 성공 (응답 시간: ${elapsed}ms)`
};
} else {
return {
connected: false,
message: `서버 응답 오류: ${response.status} ${response.statusText}`
};
}
} catch (error: any) {
console.error('서버 연결 확인 중 오류:', error);
// 오류 유형에 따른 메시지 설정
let errorMessage = '알 수 없는 네트워크 오류';
if (error.message) {
if (error.message.includes('Failed to fetch')) {
errorMessage = 'CORS 정책 오류 또는 서버 연결 실패';
} else if (error.message.includes('NetworkError')) {
errorMessage = '네트워크 연결 실패';
} else if (error.message.includes('TypeError')) {
errorMessage = '네트워크 요청 형식 오류';
} else {
errorMessage = error.message;
}
}
return {
connected: false,
message: errorMessage
};
}
};
// 서버 URL 검증
export const validateServerUrl = (url: string): boolean => {
try {
// URL 유효성 검사
new URL(url);
return true;
} catch (e) {
return false;
}
};