-
Notifications
You must be signed in to change notification settings - Fork 2
feat(be) : Tour Service 구현, Tour Client, Dto 개선 #42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤖 AI 리뷰 - src/main/kotlin/com/back/koreaTravelGuide/domain/ai/tour/client/TourApiClient.kt
🟢 좋은점:
- Kotlin 최적화: runCatching과 getOrNull()을 활용한 예외 처리로 null safety를 강화하고, idiomatic Kotlin 스타일을 잘 적용했습니다. takeIf { it.isTextual }?.asText() 패턴으로 null-safe한 JSON 노드 추출을 구현하여 안전성을 높였습니다. 또한, itemsNode.map { ... }으로 배열을 처리하는 방식이 효율적이고 확장 가능합니다. parseItems 함수를 분리하여 fetchTourInfo의 가독성을 개선한 점도 우수합니다.
- ktlint 규칙: 코드 포맷팅이 일관되며, 네이밍 컨벤션(예: buildUrl, parseItems)이 camelCase를 따르고 있습니다. 주석이 적절히 배치되어 있으며, 긴 줄은 적절히 줄바꿈되었습니다.
- println을 SLF4J Logger로 교체한 점이 로깅 표준을 준수하며, info/warn/error 레벨을 적절히 구분하여 디버깅성을 높였습니다. resultCode("0000") 체크를 추가해 API 응답의 유효성을 검증한 것도 안정성을 강화합니다.
🟡 개선사항:
- Kotlin 최적화: parseItems 함수에서 itemsNode.map { node -> ... } 부분은 이미 좋지만, TourResponse의 생성자를 data class로 가정하고 있다면, JSON 필드 매핑을 위한 Jackson 어노테이션(@JsonProperty 등)을 TourResponse에 추가하면 parseItems 로직을 더 간소화할 수 있습니다. 현재는 수동 매핑이지만, 확장성을 위해 고려해보세요. 또한, when 표현식을 활용해 resultCode 처리(예: when (resultCode) { "0000" -> ... else -> ... })를 더 명확하게 할 수 있습니다.
- ktlint 규칙: 주석이 상세하지만, "// header.resultCode 값 추출위한 노스 탐색 과정"처럼 오타("노스" → "노드")를 수정하면 더 좋습니다. logger.warn("관광 정보 API resultCode={}", resultCode) 메시지를 더 구체적으로(예: "API 호출 실패: resultCode={resultCode}, message={root.path("response").path("header").path("resultMsg").asText
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤖 AI 리뷰 - src/main/kotlin/com/back/koreaTravelGuide/domain/ai/tour/dto/TourResponse.kt
🟢 좋은점:
- Kotlin 최적화 측면에서 data class를 적절히 사용하고 있으며, TourResponse와 TourItem 모두 불변성을 유지하는 구조로 설계되어 equals(), hashCode(), toString() 등의 자동 생성이 유용할 것입니다.
- null safety가 잘 적용되어 있습니다. addr1, addr2 등 선택적 필드는 nullable(String?)로 지정되어 NullPointerException을 방지하며, 필수 필드(contentId, contentTypeId 등)는 non-null로 유지되어 API 매뉴얼의 요구사항을 반영합니다.
- ktlint 규칙 준수: 네이밍 컨벤션(camelCase)이 일관되며, 주석이 추가되어 코드 가독성을 높였습니다. 변경일(9.27) 업데이트와 NonNull 표시가 명확성을 더합니다.
🟡 개선사항:
- Kotlin 최적화: 현재는 기본 data class 구조이지만, 확장 함수를 추가하여 DTO 변환 로직(예: API 응답 시 필터링이나 매핑)을 중앙화할 수 있습니다. 예를 들어, TourItem에
fun toDisplayTitle(): String = title.takeIf { it.isNotBlank() } ?: "제목 없음"같은 확장 함수를 고려해보세요. - ktlint 규칙: 주석이 한국어로 작성되어 좋으나, 영어 혼용(예: "NonNull")을 피하고 일관되게 "NonNull" 대신 "필수"로 통일하면 더 나을 수 있습니다. 또한, 긴 줄(주석 포함)이 100자 이내로 유지되도록 포맷팅을 확인하세요.
- ApiResponse 사용: 이 DTO가 API 응답의 일부로 사용될 가능성이 높으므로, 컨트롤러에서 ApiResponse<List>처럼 감싸는 것을 상기시키는 inline 주석을 추가하면 좋습니다(직접적인 문제는 아니지만, 전체 API 일관성을 위해).
🔴 문제점:
- 없음. 변경사항이 구조적 개선(단일 DTO에서 List으로 분리)으로 보이며, 모든 필수 검토 항목을 위반하지 않습니다. 다만, 글로벌 익셉션 처리(@ControllerAdvice)는 이 DTO 파일과 무관하니 컨트롤러 레이어에서 별도 확인
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤖 AI 리뷰 - src/main/kotlin/com/back/koreaTravelGuide/domain/ai/tour/dto/TourSearchParams.kt
🟢 좋은점:
- Kotlin 최적화 측면에서 data class를 적절히 사용하며, companion object를 통해 DEFAULT_ROWS와 DEFAULT_PAGE 상수를 정의하여 하드코딩을 피하고 재사용성을 높임. 이는 Kotlin의 idiomatic한 패턴을 잘 따름.
- null safety가 고려되어 contentTypeId, areaCode, sigunguCode 등의 필드가 String? 타입으로 nullable하게 선언됨. 기본값 ""은 빈 입력을 명확히 처리하는 데 유용함.
- ktlint 규칙 준수: 네이밍 컨벤션(camelCase)이 일관되며, 포맷팅(들여쓰기, 줄바꿈)이 깔끔함. 주석도 간결하고 업데이트된 날짜/작성자를 명시하여 유지보수성을 높임.
🟡 개선사항:
- Kotlin 최적화 관점에서, 기본값 "" 대신 null을 사용하는 것을 고려할 수 있음 (e.g., String? = null). 빈 문자열과 null의 구분이 API 호출 시 혼란을 줄 수 있으므로, 문서화나 validation 로직에서 명확히 처리하는 게 좋음.
- 주석에서 "API 요청 파라미터"로 변경되었으나, 각 필드의 역할(예: contentTypeId의 가능한 값 예시)을 더 자세히 추가하면 API 사용자에게 도움이 될 수 있음.
🔴 문제점:
- 없음. 변경사항이 안정적이며, 지정된 규칙을 위반하는 부분이 보이지 않음.
JIWONKIMS
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
승인
* fix(be): DisplayName 어노테이션 Test에 반영 * fix(be): TourApiClient 수정, List형태로 결과를 반환 * feat(be): Tour service 구현 및 Dto구조 변경 (#24) * fix(be) : TourResponse dto 구조 변경 * feat(be): ai codeReview 반영,ã�기본 값 null로 변경 * feat(be) TourResponse Dto 구조 변경에 따른 Client, Service 리팩토링
Service 구현 및 Client와 Dto 개선을 하였습니다.
Service에 대한 테스트는 아직 못했습니다.
close #24