FlightItem

항공편 검색 결과 도메인. 검색 결과의 핵심 엔티티.

필드

필드타입설명
listKeyUUID검색 리스트 키
supplierString공급자 코드
scheduleKeyString스케줄 키
validatingCarrierString발권 항공사
schedulesList<Schedule>스케줄 목록
faresList<FlightFare>운임 목록
scoreBigDecimal?추천 점수
tagsList<RecommendationTag>?추천 태그
tripDirectionTypeTripDirectionType?여정 방향 (MIX용)
prepaymentBoolean?선결제 여부
groupKeyString그룹 키

계산 프로퍼티

프로퍼티설명
isMixMIX 여부 (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 생성. 가격 정책 적용.

처리 로직:

  1. FlightItemPrincipleCriteria 생성
  2. Funnel별 정책 매핑 (Fare, TASF, Discount, Promotion)
  3. Basic Fare 생성 (기본 운임)
  4. Promotion Fare 생성 (카드 프로모션 운임)
  5. 운임 목록 정렬 (가격순, 기본운임 우선)

ofReissue()

fun ofReissue(
    listKey: UUID,
    funnel: Funnel,
    fareItinerary: FareItineraryResponse,
    passengerCountMap: Map<PassengerType, Int>,
): FlightItem

재발행용 FlightItem 생성. 정책 미적용.

관련 클래스

FlightFare

운임 정보.

필드타입설명
idString운임 ID
lookUpKeyString조회 키
funnelFunnel퍼널
availInt잔여 좌석
detailKeyString상세 키
passengerFaresList<PassengerFare>승객별 운임
cardPromotionIdLong?카드 프로모션 ID
tagsList<String>태그 목록

PassengerFare

승객별 운임.

필드타입설명
typePassengerType승객 타입
countInt인원 수
airPriceLong항공료
taxLong세금
discountsList<Discount>할인 목록
ticketingFeeLong발권 수수료

계산 프로퍼티:

  • sellerDiscount: 판매자 할인
  • cardPromotionDiscount: 카드 프로모션 할인
  • sellerPromotionDiscount: 판매자 프로모션 할인
  • total: 총 금액

Schedule / Segment / Leg

스케줄 계층 구조.

Schedule (여정)
├── segments (구간 목록)
│   ├── Segment
│   │   ├── legs (레그 목록)
│   │   └── Leg

FreeBaggage

무료 수하물.

필드타입설명
volumeInt수량/무게
unitBaggageUnit단위

유틸리티 함수

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상세 조회
FlightItemRepositoryRedis 캐싱

특징

  • Serializable: Redis 캐싱 지원
  • CommonFlightItem 구현: AI 추천 지원
  • 정책 기반 가격: Pricing 정책 자동 적용
  • MIX 지원: 편도 조합 운임 지원
  • 다중 운임: 기본/카드프로모션 운임 동시 제공