PricingResponse
가격 정책 API 응답 DTO 모음. Pricing API에서 반환하는 할인/TASF/운임 정책.
주요 클래스
PricingPrincipleActiveResponse
활성 정책 응답.
| 필드 | 타입 | 설명 |
|---|---|---|
fares | List<FarePrinciple> | 운임 정책 목록 |
sellerDiscounts | List<DiscountPrinciple> | 판매자 할인 목록 |
promotions | List<PromotionPrinciple> | 프로모션 목록 |
tasfs | List<TasfPrinciple> | TASF 정책 목록 |
DiscountPrinciple
할인 정책.
| 필드 | 타입 | 설명 |
|---|---|---|
id | Long | 정책 ID |
name | String | 정책명 |
routeType | RouteType | 노선 타입 |
startAt | LocalDateTime | 시작일시 |
endAt | LocalDateTime | 종료일시 |
passengerTypes | List<PassengerType> | 적용 승객 타입 |
method | DiscountMethod | 할인 방식 |
rate | Double? | 할인율 |
maxPrice | Long? | 최대 할인금액 |
price | Long? | 고정 할인금액 |
minApplicablePrice | Long? | 최소 적용 가격 |
maxApplicablePrice | Long? | 최대 적용 가격 |
active | Boolean | 활성 여부 |
taxIncluded | Boolean | 세금 포함 여부 |
badgeId | Long? | 배지 ID |
tags | List<String> | 태그 목록 |
ruleSets | List<DiscountRuleSet> | 규칙 세트 |
funnels | List<Funnel> | 적용 퍼널 |
메서드:
fun calculatePrice(type: PassengerType, airPrice: Long, tax: Long, totalPromotionPrice: Long = 0): Long
fun predicate(criteria: FlightItemPrincipleCriteria): BooleanPromotionPrinciple
프로모션 정책.
| 필드 | 타입 | 설명 |
|---|---|---|
id | Long | 정책 ID |
routeType | RouteType | 노선 타입 |
passengerTypes | List<PassengerType> | 적용 승객 타입 |
minApplicablePrice | Long? | 최소 적용 가격 |
maxApplicablePrice | Long? | 최대 적용 가격 |
appliedTicketCount | Int | 적용 티켓 수 |
maxApplicableSeatCount | Int? | 최대 적용 좌석 수 |
taxIncluded | Boolean | 세금 포함 여부 |
ruleSets | List<PromotionRuleSet> | 규칙 세트 |
tags | List<String> | 태그 목록 |
discounts | List<PromotionDiscount> | 할인 목록 |
status | PromotionStatus | 상태 |
funnels | List<Funnel> | 적용 퍼널 |
계산 프로퍼티:
cardPromotion: 카드 프로모션 정보
메서드:
fun getDiscountMap(passengerType: PassengerType, airPrice: Long, tax: Long): Map<PromotionDiscountType, Long>
fun predicate(criteria: FlightItemPrincipleCriteria): BooleanTasfPrinciple
TASF(여행사서비스수수료) 정책.
| 필드 | 타입 | 설명 |
|---|---|---|
id | Long | 정책 ID |
routeType | RouteType | 노선 타입 |
type | TasfPrincipleType | TASF 타입 |
name | String | 정책명 |
startAt | LocalDateTime | 시작일시 |
endAt | LocalDateTime | 종료일시 |
passengerTypes | List<PassengerType> | 적용 승객 타입 |
method | TasfMethod | 계산 방식 |
rate | Double? | 비율 |
maxPrice | Long? | 최대 금액 |
price | Long? | 고정 금액 |
active | Boolean | 활성 여부 |
minApplicablePrice | Long? | 최소 적용 가격 |
maxApplicablePrice | Long? | 최대 적용 가격 |
ruleSets | List<TasfRuleSet> | 규칙 세트 |
funnels | List<Funnel> | 적용 퍼널 |
메서드:
fun predicate(criteria: FlightItemPrincipleCriteria): Boolean
fun calculatePrice(passengerType: PassengerType, passengerTotalPrice: Long): LongFarePrinciple
운임 정책.
| 필드 | 타입 | 설명 |
|---|---|---|
id | Long | 정책 ID |
channels | List<Channel> | 적용 채널 |
funnels | List<Funnel> | 적용 퍼널 |
routeType | RouteType | 노선 타입 |
endAt | LocalDateTime | 종료일시 |
order | Int | 우선순위 |
attribute | FarePrincipleAttribute | 속성 |
ruleSets | List<FarePrincipleRuleSet>? | 규칙 세트 |
CardPromotion
카드 프로모션.
| 필드 | 타입 | 설명 |
|---|---|---|
id | Long | 프로모션 ID |
name | String | 프로모션명 |
naverCardType | String? | 네이버 카드 타입 |
representative | Boolean | 대표 여부 |
규칙 시스템
RuleSet 구조
RuleSet
├── includes: List<RuleGroup> // 포함 조건 (OR 관계)
└── excludes: List<RuleGroup> // 제외 조건 (OR 관계)
RuleGroup
└── rules: List<Rule> // 규칙들 (AND 관계)
Rule
├── type: RuleType
├── values: List<String>
└── valuesOperator: RuleValuesOperator
규칙 타입
| 타입 | 설명 |
|---|---|
TRIP_TYPES | 여정 타입 |
SUPPLIERS | 공급자 |
AIRLINES | 항공사 |
DEPARTURE_NATIONS | 출발 국가 |
DEPARTURE_AIRPORTS | 출발 공항 |
DEPARTURE_DATE | 출발일 |
DEPARTURE_TIME | 출발 시간 |
ARRIVAL_NATIONS | 도착 국가 |
ARRIVAL_AIRPORTS | 도착 공항 |
ARRIVAL_DATE | 도착일 |
CABINS | 좌석 등급 |
CLASSES | 부킹 클래스 |
FLIGHT_NUMBERS | 편명 |
FARE_BASIS | 운임 기준 |
IDENTITY_TYPES | 신분 타입 |
OPERATING_CARRIERS | 운항 항공사 |
STOP_POINTS | 경유지 |
STOP_POINT_NATIONS | 경유지 국가 |
APPLIED_DAY | 적용 요일 |
APPLIED_TIME | 적용 시간 |
할인 계산
DiscountMethod
| 값 | 설명 | 계산식 |
|---|---|---|
PRICE | 고정 금액 | min(price, basePrice - 1000) |
SALES_PRICE | 판매가 기준 | min(basePrice - price, basePrice - 1000) |
PERCENTAGE | 비율 | min(basePrice * rate, maxPrice) |
사용처
| 사용 위치 | 용도 |
|---|---|
| PricingClient | API 응답 파싱 |
| FlightSearchService | 검색 결과 가격 정책 적용 |
| FlightDetailService | 상세 가격 정책 적용 |
특징
- 규칙 기반 매칭: 복잡한 조건 규칙으로 정책 매칭
- 최소 1000원 보장: 할인 후 최소 1000원은 받도록 보장
- GROUPAIR 제외: GROUPAIR 공급자는 할인/프로모션 제외
- 시간대별 적용: appliedDay/appliedTime으로 시간대별 정책