SplitFlightSearchUseCase
분리(Split) 검색 유스케이스. 왕복을 편도+편도로 분리하여 검색한다. OWO(가는편)/OWI(오는편) 검색 지원.
의존성
| 서비스 | 용도 |
|---|---|
| FlightSearchService | 검색 및 캐시 조회 |
| BookableDateService | 예약 가능 날짜 검증 |
메서드
searchFlights
fun searchFlights(
listKey: UUID,
searchInfo: SearchInfo,
flightGroupCriteria: FlightGroupCriteria,
fareDecisionStrategy: FareDecisionStrategy = FareDecisionStrategy.LOWEST_FARE_BY_IDENTITY_AND_CARD_TYPE,
): List<FlightItem>분리 검색을 수행한다. 캐시된 검색 결과가 있으면 재사용한다.
splitMultiTicketSearchFlights
fun splitMultiTicketSearchFlights(
flightItems: List<FlightItem>,
detailKey: String?,
promotionPrincipleId: Long?,
searchTripDirectionType: SearchTripDirectionType?,
flightGroupCriteria: FlightGroupCriteria,
): List<FlightItem>검색 결과를 MIX/왕복으로 분리하고, 검색 방향에 따라 필터링한다.
| Caller | Callee |
|---|---|
| SplitFlightSearchUseCase.searchFlights | FlightSearchService.getFlightItem |
| isValidConnectionTime | |
| filterByOutboundAndPolicy |
처리 흐름:
- MIX 항공편과 왕복 항공편 분리
- MIX 항공편을 OUTBOUND/INBOUND로 분리
- SearchTripDirectionType에 따라:
INBOUND: 앵커(가는편) 기준 오는편 필터링OUTBOUND: 가는편만 반환- 전체: 모든 결과 반환
calculateLowestFare (private)
private fun calculateLowestFare(
outboundFlightItems: List<FlightItem>,
inboundFlightItems: List<FlightItem>,
)가는편에 오는편 최저가 정보를 설정한다.
| Caller | Callee |
|---|---|
| SplitFlightSearchUseCase.splitMultiTicketSearchFlights | lowestFare 계산 |
filterAnchorMatchedFlightItems (private)
private fun filterAnchorMatchedFlightItems(
inboundFlightItems: List<FlightItem>,
anchorFlightItem: FlightItem,
promotionPrincipleId: Long?,
detailKey: String,
): List<FlightItem>앵커(가는편) 운임과 매칭되는 오는편만 필터링한다.
SearchTripDirectionType
| 타입 | 설명 |
|---|---|
OUTBOUND | 가는편만 검색 |
INBOUND | 오는편만 검색 (앵커 필요) |
null | 전체 검색 |
특징
- 캐시 재사용: 이전 검색 결과를 캐시 키로 재사용
- 연결 시간 검증: 가는편 도착~오는편 출발 3시간 이상 필요
- 앵커 기반 필터링: 가는편 선택 후 오는편 조회 시 운임 정책 매칭
- MIX 항공편: 성인 기본 PTC만 허용 (ADT)