FlightSearch
항공편 검색 결과 도메인. 검색 상태와 결과를 포함.
필드
| 필드 | 타입 | 설명 |
|---|---|---|
status | PollingStatus | 검색 상태 |
messageKey | MessageKey? | 메시지 키 (i18n) |
message | String? | 에러 메시지 |
flightItems | List<FlightItem> | 검색 결과 목록 |
defaultSortType | SortType | 기본 정렬 타입 |
tripType | TripType? | 여정 타입 |
airlineSet | Set<String> | 항공사 코드 세트 |
airportSet | Set<String> | 공항 코드 세트 |
searchInfoKey | String? | 검색 정보 키 |
상수
val standardFlightTimeForDirectSort: Duration = Duration.parse("PT7H")직항 우선 정렬 기준 시간 (7시간).
팩토리 메서드
pending()
fun pending(tripType: TripType): FlightSearchPENDING 상태의 검색 결과 생성.
complete()
fun complete(
items: List<FlightItem>,
tripType: TripType,
searchInfoKey: String? = null
): FlightSearch완료된 검색 결과 생성.
기본 정렬 타입 결정 로직:
- 추천 점수 있으면 →
RECOMMENDATION - 7시간 이내 직항 있으면 →
DIRECT - 그 외 →
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 | 검색 결과 생성 |
| FlightSearchRepository | Redis 캐시 저장/조회 |
특징
- Serializable: Redis 캐싱 지원 (serialVersionUID = 1L)
- 폴링 지원: PENDING → COMPLETE/ERROR 상태 전이
- 필터 메타데이터: airlineSet, airportSet으로 필터 옵션 제공
- 자동 정렬 타입: 검색 결과에 따라 최적 정렬 타입 결정