FlightSearchService

항공편 검색의 핵심 비즈니스 로직을 담당하는 서비스. GDS/NDC 어댑터를 호출하여 운임을 조회하고, 다양한 필터링 규칙을 적용하여 최종 검색 결과를 생성한다.

의존성

서비스용도
AdapterClientGDS/NDC 운임 조회
AirConsoleService검색 조건 조회
AirportService공항 정보 조회
PricingClient프로모션/TASF 조회
FlightSearchRepository검색 결과 캐싱
FlightItemRepository항공편 아이템 캐싱
AirRecommendationService추천 데이터 생성
RecommendationService추천 점수 조회

메서드

searchFlights

fun searchFlights(
    searchInfo: SearchInfo,
    onlyDirect: Boolean,
    listKey: UUID,
    useMultiTicket: Boolean,
    funnels: List<Funnel>,
    onlyRepresentativeCardPromotion: Boolean = false,
): List<FlightItem>

AirConsole에서 검색 조건을 조회한 후 searchFlightsBySearchConditions를 호출한다.


searchFlightsBySearchConditions

fun searchFlightsBySearchConditions(
    searchConditions: List<SearchCondition>,
    excludeMarketingAirlines: List<String>,
    excludeOperatingAirlines: List<String>,
    searchInfo: SearchInfo,
    onlyDirect: Boolean,
    listKey: UUID,
    useMultiTicket: Boolean,
    funnels: List<Funnel>,
    onlyRepresentativeCardPromotion: Boolean = false,
): List<FlightItem>

실제 검색 로직. 병렬로 어댑터를 호출하고, 필터링 후 FlightItem으로 변환한다.


savePolling

fun savePolling(listKey: UUID, result: FlightSearch)

비동기 검색 결과를 Redis에 저장한다.


getFlightSearch

fun getFlightSearch(listKey: UUID): FlightSearch

폴링용 검색 결과를 조회한다.


getFlightItem

fun getFlightItem(detailKey: String): FlightItem

detailKey로 단일 항공편 아이템을 조회한다.


getFlightItems

fun getFlightItems(listKey: UUID): List<FlightItem>

listKey로 전체 항공편 아이템 목록을 조회한다.


existFlightSearch

fun existFlightSearch(listKey: UUID)

검색 결과 존재 여부를 확인한다. 없으면 예외 발생.


applyRecommendationScores

fun <T : CommonFlightItem> applyRecommendationScores(
    searchInfo: SearchInfo,
    flightItems: List<T>,
)

항공편 아이템에 추천 점수를 적용한다.

필터링 규칙

검색 결과에 적용되는 필터링 규칙들:

필터 메서드설명
isViaTLVAirport텔아비브(TLV) 경유 스케줄 제외
isExcludeAirlinesSchedule제외 항공사 스케줄 필터링
isUnKnownAirport미등록 공항 스케줄 제외
isNonBookableScheduleByValidatingCarrierVC별 예약 불가 조건 체크
isStopOverStopOver 경유편 제외
isDisabledSotoAirlineSOTO 비활성 항공사 제외
isUnverifiedTGScheduleTG 652/653편 비검증 스케줄 제외
isChangedTransitAirport환승 공항 변경 스케줄 제외
hasASCarrierAS 항공 스케줄 제외 (HA VC 제외)
hasAZCarrierAZ 마케팅 캐리어 제외 (TW VC 제외)
hasNoAvailability좌석 없는 스케줄 제외

항공사별 특별 처리

isNonBookableScheduleByValidatingCarrier 메서드에서 처리하는 항공사별 규칙:

VC규칙JIRA
VJ출발 3일 이내 제외-
VN, ZA검색일+2일 이후만INTAIROP-311, INTAIROP-557
8MK7 공동운항편 제외INTAIR-647
SQTR 마케팅 캐리어 제외AIRPLF-817
CXPUS 출발/도착 비즈니스 제외INTAIR-380
HAFUK 경유 또는 26.4.22 이후 제외AIRINTG-
PRPR 40% 미만 제외-
QRG3 마케팅 캐리어 제외INTAIROP-470
OZTP 스케줄 제외INTAIROP-798
UAAC 마케팅 캐리어 제외INTAIROP-674
AI인도 국내선 7일 이내 제외INDAI-829