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/왕복으로 분리하고, 검색 방향에 따라 필터링한다.

처리 흐름:

  1. MIX 항공편과 왕복 항공편 분리
  2. MIX 항공편을 OUTBOUND/INBOUND로 분리
  3. SearchTripDirectionType에 따라:
    • INBOUND: 앵커(가는편) 기준 오는편 필터링
    • OUTBOUND: 가는편만 반환
    • 전체: 모든 결과 반환

calculateLowestFare (private)

private fun calculateLowestFare(
    outboundFlightItems: List<FlightItem>,
    inboundFlightItems: List<FlightItem>,
)

가는편에 오는편 최저가 정보를 설정한다.


filterAnchorMatchedFlightItems (private)

private fun filterAnchorMatchedFlightItems(
    inboundFlightItems: List<FlightItem>,
    anchorFlightItem: FlightItem,
    promotionPrincipleId: Long?,
    detailKey: String,
): List<FlightItem>

앵커(가는편) 운임과 매칭되는 오는편만 필터링한다.

SearchTripDirectionType

타입설명
OUTBOUND가는편만 검색
INBOUND오는편만 검색 (앵커 필요)
null전체 검색

특징

  • 캐시 재사용: 이전 검색 결과를 캐시 키로 재사용
  • 연결 시간 검증: 가는편 도착~오는편 출발 3시간 이상 필요
  • 앵커 기반 필터링: 가는편 선택 후 오는편 조회 시 운임 정책 매칭
  • MIX 항공편: 성인 기본 PTC만 허용 (ADT)