import 'package:dio/dio.dart'; import '../core/config/environment.dart'; import '../data/datasources/remote/api_client.dart'; /// API 헬스체크 테스트를 위한 서비스 class HealthCheckService { final ApiClient _apiClient; HealthCheckService({ApiClient? apiClient}) : _apiClient = apiClient ?? ApiClient(); /// 헬스체크 API 호출 Future> checkHealth() async { try { print('=== 헬스체크 시작 ==='); print('API Base URL: ${Environment.apiBaseUrl}'); print('Full URL: ${Environment.apiBaseUrl}/health'); final response = await _apiClient.get('/health'); print('응답 상태 코드: ${response.statusCode}'); print('응답 데이터: ${response.data}'); return { 'success': true, 'data': response.data, 'statusCode': response.statusCode, }; } on DioException catch (e) { print('=== DioException 발생 ==='); print('에러 타입: ${e.type}'); print('에러 메시지: ${e.message}'); print('에러 응답: ${e.response?.data}'); print('에러 상태 코드: ${e.response?.statusCode}'); // CORS 에러인지 확인 if (e.type == DioExceptionType.connectionError || e.type == DioExceptionType.unknown) { print('⚠️ CORS 또는 네트워크 연결 문제일 가능성이 있습니다.'); } return { 'success': false, 'error': e.message ?? '알 수 없는 에러', 'errorType': e.type.toString(), 'statusCode': e.response?.statusCode, 'responseData': e.response?.data, }; } catch (e) { print('=== 일반 에러 발생 ==='); print('에러: $e'); return { 'success': false, 'error': e.toString(), }; } } /// 직접 Dio로 테스트 (인터셉터 없이) Future> checkHealthDirect() async { try { print('=== 직접 Dio 헬스체크 시작 ==='); final dio = Dio(BaseOptions( baseUrl: Environment.apiBaseUrl, connectTimeout: const Duration(seconds: 10), receiveTimeout: const Duration(seconds: 10), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, )); // 로깅 인터셉터만 추가 dio.interceptors.add(LogInterceptor( requestBody: true, responseBody: true, requestHeader: true, responseHeader: true, error: true, )); final response = await dio.get('/health'); return { 'success': true, 'data': response.data, 'statusCode': response.statusCode, }; } catch (e) { print('직접 Dio 에러: $e'); return { 'success': false, 'error': e.toString(), }; } } }