Skip to content

Commit 37a36ea

Browse files
committed
feat(be): Tour service 구현 및 Dto구조 변경 (#24)
1 parent 10e7f8f commit 37a36ea

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

src/main/kotlin/com/back/koreaTravelGuide/domain/ai/tour/dto/InternalData.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,18 @@ package com.back.koreaTravelGuide.domain.ai.tour.dto
88

99
data class InternalData(
1010
// 한 페이지 데이터 수, 10으로 지정
11-
val numOfRows: Int = 10,
11+
val numOfRows: Int = DEFAULT_ROWS,
1212
// 페이지 번호, 1로 지정
13-
val pageNo: Int = 1,
13+
val pageNo: Int = DEFAULT_PAGE,
1414
// 관광타입 ID, 미 입력시 전체 조회 (12:관광지, 38 : 쇼핑...),
1515
val contentTypeId: String? = "",
1616
// 지역코드, 미 입력시 지역 전체 조회 (1:서울, 2:인천...)
1717
val areaCode: String? = "",
1818
// 시군구코드, 미 입력시 전체 조회
1919
val sigunguCode: String? = "",
20-
)
20+
) {
21+
companion object {
22+
const val DEFAULT_ROWS = 10
23+
const val DEFAULT_PAGE = 1
24+
}
25+
}
Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,50 @@
11
package com.back.koreaTravelGuide.domain.ai.tour.service
22

3-
// TODO: 관광 정보 캐싱 서비스 - 캐시 관리 및 데이터 제공
4-
class TourService
3+
import com.back.koreaTravelGuide.domain.ai.tour.client.TourApiClient
4+
import com.back.koreaTravelGuide.domain.ai.tour.dto.InternalData
5+
import com.back.koreaTravelGuide.domain.ai.tour.dto.TourResponse
6+
import org.slf4j.LoggerFactory
7+
import org.springframework.stereotype.Service
8+
9+
// 09.26 양현준
10+
@Service
11+
class TourService(
12+
private val tourApiClient: TourApiClient,
13+
) {
14+
private val logger = LoggerFactory.getLogger(this::class.java)
15+
16+
// 관광 정보 조회
17+
fun fetchTours(
18+
numOfRows: Int? = null,
19+
pageNo: Int? = null,
20+
contentTypeId: String? = null,
21+
areaCode: String? = null,
22+
sigunguCode: String? = null,
23+
): List<TourResponse> {
24+
// InternalData 객체 생성, null 또는 비정상 값은 기본값으로 대체
25+
val request =
26+
InternalData(
27+
numOfRows = numOfRows?.takeIf { it > 0 } ?: InternalData.DEFAULT_ROWS,
28+
pageNo = pageNo?.takeIf { it > 0 } ?: InternalData.DEFAULT_PAGE,
29+
contentTypeId = contentTypeId?.ifBlank { null } ?: "",
30+
areaCode = areaCode?.ifBlank { null } ?: "",
31+
sigunguCode = sigunguCode?.ifBlank { null } ?: "",
32+
)
33+
34+
// request를 바탕으로 관광 정보 API 호출
35+
val tours = tourApiClient.fetchTourInfo(request)
36+
37+
// 관광 정보 결과 로깅
38+
if (tours.isEmpty()) {
39+
logger.info(
40+
"관광 정보 없음: params={} / {} {}",
41+
request.areaCode,
42+
request.sigunguCode,
43+
request.contentTypeId,
44+
)
45+
} else {
46+
logger.info("관광 정보 {}건 조회 성공", tours.size)
47+
}
48+
return tours
49+
}
50+
}

0 commit comments

Comments
 (0)