AirRecommendationService
추천 데이터를 생성하는 서비스. 검색 결과에서 추천 대상 항공편을 선별하여 추천 시스템에 전송한다.
의존성
| 서비스 | 용도 |
|---|---|
| AirRecommendationClient | 추천 API 호출 |
메서드
createRecommendations
fun createRecommendations(
flightItems: List<FlightItem>,
airportMap: Map<String, Airport>,
policy: AirRecommendationPolicy = AirRecommendationPolicy.LOWEST_PRICE_PER_SCHEDULE,
funnel: AirRecommendationFunnel = AirRecommendationFunnel.SEARCH,
)추천 데이터를 생성한다.
처리 흐름:
- MIX 항공편 필터링 (왕복만)
- 동일 캐빈 스케줄만 필터링
- 정책에 따라 추천 대상 추출
- 추천 API 호출
filterMixFlight (private)
private fun List<FlightItem>.filterMixFlight(): List<FlightItem>MIX 항공편(편도)을 제외하고 왕복만 반환한다.
filterAllSameCabin (private)
private fun List<FlightItem>.filterAllSameCabin(): List<FlightItem>모든 구간이 동일 캐빈인 항공편만 반환한다.
extractByPolicy (private)
private fun List<FlightItem>.extractByPolicy(policy: AirRecommendationPolicy): List<FlightItem>정책에 따라 추천 대상을 추출한다.
| 정책 | 설명 |
|---|---|
LOWEST_PRICE_PER_SCHEDULE | 스케줄별 최저가 |
LOWEST_PRICE_PER_AIRLINE | 항공사별 최저가 |
findLowestFlightItems (private)
private fun List<FlightItem>.findLowestFlightItems(): List<FlightItem>직항 최저가 + 경유 최저가(직항보다 저렴한 경우)를 반환한다.
AirRecommendationFunnel
| 퍼널 | 설명 |
|---|---|
SEARCH | 일반 검색 |
CURATION | 큐레이션 스크래핑 |
특징
- 왕복만: MIX(편도) 항공편은 추천 대상에서 제외
- 동일 캐빈: 구간별 캐빈이 다른 항공편 제외
- 직항 우선: 직항 최저가 + 직항보다 저렴한 경유만 추천
- 항공사별 추천: LOWEST_PRICE_PER_AIRLINE 정책 지원