|
1 | 1 | package com.back.koreaTravelGuide.domain.ai.tour.service |
2 | 2 |
|
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