FlightSearch

항공편 검색 결과 도메인. 검색 상태와 결과를 포함.

필드

필드타입설명
statusPollingStatus검색 상태
messageKeyMessageKey?메시지 키 (i18n)
messageString?에러 메시지
flightItemsList<FlightItem>검색 결과 목록
defaultSortTypeSortType기본 정렬 타입
tripTypeTripType?여정 타입
airlineSetSet<String>항공사 코드 세트
airportSetSet<String>공항 코드 세트
searchInfoKeyString?검색 정보 키

상수

val standardFlightTimeForDirectSort: Duration = Duration.parse("PT7H")

직항 우선 정렬 기준 시간 (7시간).

팩토리 메서드

pending()

fun pending(tripType: TripType): FlightSearch

PENDING 상태의 검색 결과 생성.

complete()

fun complete(
    items: List<FlightItem>,
    tripType: TripType,
    searchInfoKey: String? = null
): FlightSearch

완료된 검색 결과 생성.

기본 정렬 타입 결정 로직:

  1. 추천 점수 있으면 → RECOMMENDATION
  2. 7시간 이내 직항 있으면 → DIRECT
  3. 그 외 → PRICE

항공사/공항 세트 추출:

  • 발권 항공사, 마케팅/운항 항공사 포함
  • 모든 경유지, 출발/도착 공항 포함

error()

fun error(message: String?): FlightSearch
fun error(messageKey: MessageKey?, message: String?): FlightSearch

에러 상태의 검색 결과 생성.

폴링 패턴

1. 검색 요청 → pending(tripType) 저장
2. 비동기 검색 실행
3. 검색 완료 → complete(items, tripType) 저장
4. 검색 실패 → error(message) 저장
5. 클라이언트 폴링으로 상태 확인

사용처

사용 위치용도
FlightSearchService검색 결과 생성
FlightSearchRepositoryRedis 캐시 저장/조회

특징

  • Serializable: Redis 캐싱 지원 (serialVersionUID = 1L)
  • 폴링 지원: PENDING → COMPLETE/ERROR 상태 전이
  • 필터 메타데이터: airlineSet, airportSet으로 필터 옵션 제공
  • 자동 정렬 타입: 검색 결과에 따라 최적 정렬 타입 결정