AirSchedulePayload
Kinesis 스트림 전송용 페이로드 DTO. GZIP 압축된 항공편 데이터 포함.
클래스 정의
@JsonIgnoreProperties(ignoreUnknown = true)
class AirSchedulePayload(
val request: SearchInfoPayload,
val body: ByteArray,
val isBodyCompressed: Boolean
) : Serializable필드
| 필드 | 타입 | 설명 |
|---|---|---|
request | SearchInfoPayload | 검색 요청 정보 |
body | ByteArray | GZIP 압축된 FlightItemPayload 목록 |
isBodyCompressed | Boolean | 압축 여부 (항상 true) |
포함 DTO
SearchInfoPayload
검색 정보 페이로드 DTO.
| 필드 | 타입 | 설명 |
|---|---|---|
tripType | TripType | 여정 타입 |
originType | LocationType | 출발지 타입 |
origin | String | 출발지 IATA |
destinationType | LocationType | 도착지 타입 |
destination | String | 도착지 IATA |
outboundDate | LocalDate | 출발일 |
inboundDate | LocalDate? | 귀국일 |
channel | Channel | 채널 |
funnel | Funnel | 퍼널 |
cabins | Set<CabinType> | 좌석 등급 |
팩토리 메서드: of(searchInfoEvent: SearchInfoEvent)
FlightItemPayload
항공편 아이템 페이로드 DTO.
| 필드 | 타입 | 설명 |
|---|---|---|
channel | Channel | 채널 |
validatingCarrier | String | 발권 항공사 |
schedules | List<SchedulePayload> | 스케줄 목록 |
fares | List<FlightFarePayload> | 운임 목록 |
tripDirectionType | TripDirectionType? | MIX 방향 타입 |
retrievedAt | LocalDateTime | 조회 시간 |
팩토리 메서드: of(flightItem: FlightItemEvent)
SchedulePayload
스케줄 페이로드 DTO.
| 필드 | 타입 | 설명 |
|---|---|---|
sequence | Int | 순서 |
flightTime | String | 비행 시간 |
departure | String | 출발 공항 |
departureCity | String | 출발 도시 |
arrival | String | 도착 공항 |
arrivalCity | String | 도착 도시 |
departureAt | LocalDateTime | 출발 시간 |
arrivalAt | LocalDateTime | 도착 시간 |
stopPoints | List<String> | 경유지 목록 |
addDay | Int | 추가일 |
stop | Int | 경유 횟수 |
freeBaggage | FreeBaggagePayload? | 무료 수하물 |
segments | List<SegmentPayload> | 세그먼트 목록 |
FreeBaggagePayload
무료 수하물 페이로드 DTO.
| 필드 | 타입 | 설명 |
|---|---|---|
volume | Int | 용량 |
unit | BaggageUnit | 단위 |
SegmentPayload
세그먼트 페이로드 DTO.
| 필드 | 타입 | 설명 |
|---|---|---|
sequence | Int | 순서 |
departure | String | 출발 공항 |
departureCity | String | 출발 도시 |
departureAt | LocalDateTime | 출발 시간 |
arrival | String | 도착 공항 |
arrivalCity | String | 도착 도시 |
arrivalAt | LocalDateTime | 도착 시간 |
marketingCarrier | String | 마케팅 항공사 |
operatingCarrier | String? | 운항 항공사 |
bookingClass | String | 예약 클래스 |
flightNumber | String | 편명 |
cabin | CabinType | 좌석 등급 |
FlightFarePayload
운임 페이로드 DTO.
| 필드 | 타입 | 설명 |
|---|---|---|
funnel | Funnel | 퍼널 |
airPrice | Long | 항공료 |
tax | Long | 세금 |
fuelCharge | Long | 유류할증료 |
ticketingFee | Long | 발권 수수료 |
discounts | List<Discount> | 할인 목록 |
promotionPrincipleId | Long? | 프로모션 원칙 ID |
cardPromotionId | Long? | 카드 프로모션 ID |
cardPromotionName | String? | 카드 프로모션명 |
identityType | IdentityType? | 신원 타입 |
total | Long | 총액 |
데이터 변환 플로우
AirScheduleEvent
│
├──► SearchInfoEvent → SearchInfoPayload.of()
│
└──► List<FlightItemEvent>
│
└──► FlightItemPayload.of() (각각)
│
├──► SchedulePayload.of()
│ │
│ ├──► FreeBaggagePayload.of()
│ │
│ └──► SegmentPayload.of()
│
└──► FlightFarePayload.of()
최종: List<FlightItemPayload> → GZIP 압축 → ByteArray
Event vs Payload 비교
| 계층 | Event DTO | Payload DTO |
|---|---|---|
| 인터페이스 | MessageArgumentPayload | Serializable |
| 용도 | 애플리케이션 내 이벤트 전달 | Kinesis 스트림 전송 |
| total 필드 | 계산 프로퍼티 | 직접 필드 |
특징
- Serializable: Java 직렬화 지원
- @JsonIgnoreProperties: 알 수 없는 필드 무시
- GZIP 압축: body는 압축된 ByteArray
- Event → Payload 변환: 팩토리 메서드로 변환