FlightItem
항공편 검색 결과 도메인. 검색 결과의 핵심 엔티티.
필드
| 필드 | 타입 | 설명 |
|---|---|---|
listKey | UUID | 검색 리스트 키 |
supplier | String | 공급자 코드 |
scheduleKey | String | 스케줄 키 |
validatingCarrier | String | 발권 항공사 |
schedules | List<Schedule> | 스케줄 목록 |
fares | List<FlightFare> | 운임 목록 |
score | BigDecimal? | 추천 점수 |
tags | List<RecommendationTag>? | 추천 태그 |
tripDirectionType | TripDirectionType? | 여정 방향 (MIX용) |
prepayment | Boolean? | 선결제 여부 |
groupKey | String | 그룹 키 |
계산 프로퍼티
| 프로퍼티 | 설명 |
|---|---|
isMix | MIX 여부 (tripDirectionType != null) |
lowestFare | 최저가 운임 |
isDirect | 직항 여부 |
maxStop | 최대 경유 수 |
outboundDepartureAt | 가는편 출발 시각 |
inboundArrivalAt | 오는편 도착 시각 |
팩토리 메서드
of()
fun of(
listKey: UUID,
funnels: List<Funnel>,
fareItinerary: FareItineraryResponse,
airportMap: Map<String, Airport>,
passengerCountMap: Map<PassengerType, Int>,
activePrinciples: PricingPrincipleActiveResponse?,
prepayment: Boolean,
useMultiTicket: Boolean,
): FlightItem?검색 응답에서 FlightItem 생성. 가격 정책 적용.
처리 로직:
- FlightItemPrincipleCriteria 생성
- Funnel별 정책 매핑 (Fare, TASF, Discount, Promotion)
- Basic Fare 생성 (기본 운임)
- Promotion Fare 생성 (카드 프로모션 운임)
- 운임 목록 정렬 (가격순, 기본운임 우선)
ofReissue()
fun ofReissue(
listKey: UUID,
funnel: Funnel,
fareItinerary: FareItineraryResponse,
passengerCountMap: Map<PassengerType, Int>,
): FlightItem재발행용 FlightItem 생성. 정책 미적용.
관련 클래스
FlightFare
운임 정보.
| 필드 | 타입 | 설명 |
|---|---|---|
id | String | 운임 ID |
lookUpKey | String | 조회 키 |
funnel | Funnel | 퍼널 |
avail | Int | 잔여 좌석 |
detailKey | String | 상세 키 |
passengerFares | List<PassengerFare> | 승객별 운임 |
cardPromotionId | Long? | 카드 프로모션 ID |
tags | List<String> | 태그 목록 |
PassengerFare
승객별 운임.
| 필드 | 타입 | 설명 |
|---|---|---|
type | PassengerType | 승객 타입 |
count | Int | 인원 수 |
airPrice | Long | 항공료 |
tax | Long | 세금 |
discounts | List<Discount> | 할인 목록 |
ticketingFee | Long | 발권 수수료 |
계산 프로퍼티:
sellerDiscount: 판매자 할인cardPromotionDiscount: 카드 프로모션 할인sellerPromotionDiscount: 판매자 프로모션 할인total: 총 금액
Schedule / Segment / Leg
스케줄 계층 구조.
Schedule (여정)
├── segments (구간 목록)
│ ├── Segment
│ │ ├── legs (레그 목록)
│ │ └── Leg
FreeBaggage
무료 수하물.
| 필드 | 타입 | 설명 |
|---|---|---|
volume | Int | 수량/무게 |
unit | BaggageUnit | 단위 |
유틸리티 함수
isValidConnectionTime()
fun isValidConnectionTime(outbound: FlightItem, inbound: FlightItem): Boolean연결 시간 유효성 검사. 최소 4시간 간격 필요.
filterByOutboundAndPolicy()
fun List<FlightFare>.filterByOutboundAndPolicy(outboundFare: FlightFare): List<FlightFare>가는편 운임과 매칭되는 오는편 운임 필터링.
pickOptimalFlight()
fun List<FlightItem>.pickOptimalFlight(strategy: FareDecisionStrategy): FlightItem전략에 따라 최적 항공편 선택.
사용처
| 사용 위치 | 용도 |
|---|---|
| FlightSearchService | 검색 결과 생성 |
| FlightDetailService | 상세 조회 |
| FlightItemRepository | Redis 캐싱 |
특징
- Serializable: Redis 캐싱 지원
- CommonFlightItem 구현: AI 추천 지원
- 정책 기반 가격: Pricing 정책 자동 적용
- MIX 지원: 편도 조합 운임 지원
- 다중 운임: 기본/카드프로모션 운임 동시 제공