CombineFlightSearchUseCase
조합(Combined) 검색 유스케이스. 가는편+오는편을 조합하여 멀티티켓 상품을 생성한다.
의존성
| 서비스 | 용도 |
|---|---|
| FlightSearchService | 검색 및 추천 점수 |
| BookableDateService | 예약 가능 날짜 검증 |
메서드
searchFlights
fun searchFlights(
searchInfo: SearchInfo,
onlyDirect: Boolean,
useRecommendation: Boolean,
fareDecisionStrategy: FareDecisionStrategy,
onlyRepresentativeCardPromotion: Boolean = false,
flightGroupCriteria: FlightGroupCriteria,
funnels: List<Funnel>,
debug: Boolean = false
): List<CombinedFlightItem>조합 검색을 수행한다. 왕복 + MIX 조합 상품을 생성한다.
combineMultiTicketSearchFlights (private)
private fun combineMultiTicketSearchFlights(
flightItems: List<FlightItem>,
): List<CombinedFlightItem>검색 결과를 CombinedFlightItem으로 변환한다.
| Caller | Callee |
|---|---|
| CombineFlightSearchUseCase.searchFlights | CombinedFlightItem.ofRoundTrip |
| CombineFlightSearchUseCase.combineFlightItems | |
| CombinedFlightItem.ofMix |
처리 흐름:
- MIX 항공편과 왕복 항공편 분리
- 왕복 항공편을 CombinedFlightItem으로 래핑
- OUTBOUND와 INBOUND를 조합하여 MIX CombinedFlightItem 생성
combineFlightItems (private)
private fun combineFlightItems(
outbound: FlightItem,
inbounds: List<FlightItem>,
): List<CombinedFlightItem>가는편과 오는편을 조합한다.
| Caller | Callee |
|---|---|
| CombineFlightSearchUseCase.combineMultiTicketSearchFlights | isValidConnectionTime |
| filterByOutboundAndPolicy | |
| CombinedFlightFare.ofMix | |
| CombinedFlightItem.ofMix |
compact (private)
private fun List<CombinedFlightItem>.compact(debug: Boolean): List<CombinedFlightItem>동일한 대표 스케줄끼리 그룹핑하여 최적의 항공편만 노출한다.
| Caller | Callee |
|---|---|
| CombineFlightSearchUseCase.searchFlights | 그룹핑 및 최소 비행시간 선택 |
그룹 키: {마케팅캐리어}{편명}{출발시간}{도착공항}{경유횟수}{최저가}
CombinedFlightItem vs FlightItem
| 항목 | FlightItem | CombinedFlightItem |
|---|---|---|
| 용도 | 단일 티켓 | 조합 티켓 (RT + MIX) |
| 운임 | FlightFare | CombinedFlightFare |
| 스케줄 | 직접 포함 | outbound + inbound 조합 |
특징
- MIX 조합: 가는편과 오는편을 독립적으로 조합
- 연결 시간 검증: 가는편 도착~오는편 출발 3시간 이상 필요
- Compact: 동일 대표 스케줄 중 최소 비행시간 선택
- 디버그 모드: debug=true 시 hidden 항목도 반환
- 왕복 래핑: 왕복 항공편도 CombinedFlightItem 형태로 통일