diff --git a/app/ai-chat/chat.tsx b/app/ai-chat/chat.tsx index 52c32e5..809c03b 100644 --- a/app/ai-chat/chat.tsx +++ b/app/ai-chat/chat.tsx @@ -180,12 +180,24 @@ export default function AIChatScreen() { return; } + // 로그인 확인 + const accessToken = tokens?.accessToken; + if (!accessToken) { + const errorMessage: Message = { + id: Date.now().toString(), + text: '여행 계획을 저장하려면 로그인이 필요합니다.', + isUser: false, + timestamp: new Date(), + }; + setMessages(prev => [...prev, errorMessage]); + return; + } + try { setIsLoading(true); console.log('=== 여행 계획 저장 시작 ==='); console.log('travel_id:', currentTravelId); - const accessToken = tokens?.accessToken; await saveTravelPlan(currentTravelId, accessToken); // 저장 완료 표시 @@ -203,10 +215,10 @@ export default function AIChatScreen() { }; setMessages(prev => [...prev, savedMessage]); } catch (error: any) { - console.log('저장 실패:', error); + console.error('저장 실패:', error); const errorMessage: Message = { id: Date.now().toString(), - text: '저장에 실패했습니다. 다시 시도해주세요.', + text: `저장에 실패했습니다.\n${error.message || '다시 시도해주세요.'}`, isUser: false, timestamp: new Date(), }; diff --git a/services/api.ts b/services/api.ts index 0d0cce2..8205111 100644 --- a/services/api.ts +++ b/services/api.ts @@ -682,6 +682,7 @@ export const saveTravelPlan = async ( ): Promise => { console.log('=== 여행 계획 저장 시작 ==='); console.log('travel_id:', travelId); + console.log('accessToken:', accessToken ? 'Present' : 'Missing'); const headers: Record = { 'Content-Type': 'application/json', @@ -702,8 +703,15 @@ export const saveTravelPlan = async ( if (!response.ok) { const errorData = await response.json().catch(() => ({})); - console.log('저장 실패:', errorData); - throw new Error(errorData.detail || `저장 실패: ${response.status}`); + console.error('저장 실패:', errorData); + console.error('Status:', response.status); + + // 401 Unauthorized 처리 + if (response.status === 401) { + throw new Error('인증이 필요합니다. 로그인 후 다시 시도해주세요.'); + } + + throw new Error(errorData.detail || errorData.message || `저장 실패: ${response.status}`); } const result = await response.json(); @@ -712,7 +720,7 @@ export const saveTravelPlan = async ( // FastAPI가 200으로 응답하더라도 실제 결과 확인 if (result.success === false) { - console.log('Spring Boot 저장 실패:', result); + console.error('Spring Boot 저장 실패:', result); throw new Error(result.error || result.detail || '저장에 실패했습니다.'); }