feat: 초기 프로젝트 설정 및 LunchPick 앱 구현
LunchPick(오늘 뭐 먹Z?) Flutter 앱의 초기 구현입니다. 주요 기능: - 네이버 지도 연동 맛집 추가 - 랜덤 메뉴 추천 시스템 - 날씨 기반 거리 조정 - 방문 기록 관리 - Bluetooth 맛집 공유 - 다크모드 지원 기술 스택: - Flutter 3.8.1+ - Riverpod 상태 관리 - Hive 로컬 DB - Clean Architecture 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
110
test/debug_naver_search_test.dart
Normal file
110
test/debug_naver_search_test.dart
Normal file
@@ -0,0 +1,110 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:lunchpick/data/api/naver_api_client.dart';
|
||||
import 'package:lunchpick/data/datasources/remote/naver_map_parser.dart';
|
||||
|
||||
void main() {
|
||||
test('Debug: 네이버 검색 API 전체 응답 확인', () async {
|
||||
final parser = NaverMapParser();
|
||||
final apiClient = NaverApiClient();
|
||||
|
||||
try {
|
||||
print('\n========== 네이버 검색 API 디버깅 시작 ==========\n');
|
||||
|
||||
// 테스트 URL
|
||||
const testUrl = 'https://pcmap.place.naver.com/restaurant/1638379069/home';
|
||||
const placeId = '1638379069';
|
||||
|
||||
// 1. 한글 텍스트 추출
|
||||
print('1. 한글 텍스트 추출 중...');
|
||||
final koreanData = await apiClient.fetchKoreanTextsFromPcmap(placeId);
|
||||
|
||||
print('\n추출된 한글 텍스트:');
|
||||
if (koreanData['koreanTexts'] != null) {
|
||||
final texts = koreanData['koreanTexts'] as List;
|
||||
for (var i = 0; i < texts.length && i < 10; i++) {
|
||||
print(' [$i] ${texts[i]}');
|
||||
}
|
||||
}
|
||||
|
||||
print('\nJSON-LD 상호명: ${koreanData['jsonLdName']}');
|
||||
print('Apollo State 상호명: ${koreanData['apolloStateName']}');
|
||||
|
||||
// 2. 검색할 키워드 결정
|
||||
String searchQuery = '';
|
||||
if (koreanData['jsonLdName'] != null) {
|
||||
searchQuery = koreanData['jsonLdName'] as String;
|
||||
} else if (koreanData['apolloStateName'] != null) {
|
||||
searchQuery = koreanData['apolloStateName'] as String;
|
||||
} else if (koreanData['koreanTexts'] != null && (koreanData['koreanTexts'] as List).isNotEmpty) {
|
||||
searchQuery = (koreanData['koreanTexts'] as List).first as String;
|
||||
}
|
||||
|
||||
print('\n2. 검색 키워드: "$searchQuery"');
|
||||
|
||||
// 3. 네이버 로컬 검색 API 호출
|
||||
print('\n3. 네이버 검색 API 호출 중...');
|
||||
final searchResults = await apiClient.searchLocal(
|
||||
query: searchQuery,
|
||||
display: 10,
|
||||
);
|
||||
|
||||
print('\n========== 검색 API 전체 응답 (JSON) ==========');
|
||||
|
||||
// 각 검색 결과를 자세히 출력
|
||||
for (var i = 0; i < searchResults.length; i++) {
|
||||
final result = searchResults[i];
|
||||
print('\n--- 검색 결과 #$i ---');
|
||||
print('상호명: ${result.title}');
|
||||
print('카테고리: ${result.category}');
|
||||
print('설명: ${result.description}');
|
||||
print('전화번호: ${result.telephone}');
|
||||
print('도로명주소: ${result.roadAddress}');
|
||||
print('지번주소: ${result.address}');
|
||||
print('링크: ${result.link}');
|
||||
print('좌표 X (경도): ${result.mapx}');
|
||||
print('좌표 Y (위도): ${result.mapy}');
|
||||
|
||||
// Place ID 추출
|
||||
final extractedPlaceId = result.extractPlaceId();
|
||||
print('추출된 Place ID: $extractedPlaceId');
|
||||
print('타겟 Place ID와 일치?: ${extractedPlaceId == placeId}');
|
||||
|
||||
// 좌표 변환
|
||||
if (result.mapx != null && result.mapy != null) {
|
||||
final lat = result.mapy! / 10000000.0;
|
||||
final lng = result.mapx! / 10000000.0;
|
||||
print('변환된 좌표: $lat, $lng');
|
||||
}
|
||||
}
|
||||
|
||||
print('\n========== 분석 결과 ==========');
|
||||
print('총 검색 결과 수: ${searchResults.length}');
|
||||
|
||||
// Place ID가 일치하는 결과 찾기
|
||||
var matchingResults = <int>[];
|
||||
for (var i = 0; i < searchResults.length; i++) {
|
||||
final extractedId = searchResults[i].extractPlaceId();
|
||||
if (extractedId == placeId) {
|
||||
matchingResults.add(i);
|
||||
}
|
||||
}
|
||||
|
||||
if (matchingResults.isNotEmpty) {
|
||||
print('✅ Place ID가 일치하는 결과: ${matchingResults.join(', ')}번째');
|
||||
} else {
|
||||
print('❌ Place ID가 일치하는 결과를 찾을 수 없음');
|
||||
}
|
||||
|
||||
print('\n========== 테스트 완료 ==========\n');
|
||||
|
||||
} catch (e, stackTrace) {
|
||||
print('\n❌ 오류 발생: $e');
|
||||
print('\n스택 트레이스:');
|
||||
print(stackTrace);
|
||||
} finally {
|
||||
parser.dispose();
|
||||
apiClient.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user