CurationScrapingService
큐레이션 데이터 수집 배치 서비스. 활성화된 큐레이션 원칙에 따라 항공편을 검색하고 추천 데이터를 생성한다.
의존성
| 서비스 | 용도 |
|---|---|
| AirRecommendationClient | 큐레이션 원칙 조회 |
| BookableDateService | 예약 가능 날짜 범위 |
| AirportService | 공항 정보 |
| LocationService | 위치 정보 |
| AirConsoleService | 검색 조건 |
| FlightSearchService | 항공편 검색 |
| AirRecommendationService | 추천 데이터 생성 |
| SlackClient | 결과 알림 |
메서드
scraping
fun scraping()큐레이션 스크래핑 배치를 실행한다.
처리 흐름:
- 활성 큐레이션 원칙 조회
- 오늘 날짜 및 시간 기반 필터링
- 출발일 범위 계산 (여정일수 range)
- 각 조건별 검색 실행
- 추천 데이터 생성
- Slack 결과 알림
filterSearchConditions (private)
private fun SearchConditionWrapper.filterSearchConditions(jobCondition: JobCondition): SearchConditionWrapperJobCondition의 항공사 필터를 적용한다.
searchFlights (private)
private fun searchFlights(condition: ScrapingCondition): List<FlightItem>스크래핑 조건으로 검색을 실행한다.
findDepartureDates (private)
private fun CurationPrincipleResponse.findDepartureDates(bookableDateRange: LongRange): List<LocalDate>큐레이션 원칙에서 출발일 목록을 추출한다.
| JobConditionType | 설명 |
|---|---|
RANGE | 시작일~종료일 범위 |
DATE | 특정 날짜 목록 |
sendCurationScraping
fun sendCurationScraping(startAt: LocalDateTime, results: List<ScrapingResult>)스크래핑 결과를 Slack으로 알린다.
CurationPrincipleResponse
| 필드 | 설명 |
|---|---|
id | 원칙 ID |
title | 원칙 제목 |
jobCondition | 실행 조건 |
JobCondition
| 필드 | 설명 |
|---|---|
origin | 출발 공항 |
destination | 도착 공항 |
period | 여정 기간 (min~max) |
direct | 직항 여부 |
airlines | 특정 항공사 필터 |
startAt / endAt | 원칙 유효 기간 |
runTimes | 실행 시간대 |
dayOfWeeks | 실행 요일 |
ScrapingResult
| 필드 | 설명 |
|---|---|
principleId | 원칙 ID |
title | 원칙 제목 |
elapsed | 소요 시간(초) |
totalCount | 총 검색 수 |
successCount | 성공 수 |
failedList | 실패 목록 |
특징
- 시간대 기반 실행: runTimes로 특정 시간에만 실행
- 요일 필터: dayOfWeeks로 특정 요일만 검색
- 항공사별 최저가: 항공사 지정 시
LOWEST_PRICE_PER_AIRLINE정책 - Slack 알림: 배치 결과를
#항공팀_배치로그채널에 알림