CurationScrapingService

큐레이션 데이터 수집 배치 서비스. 활성화된 큐레이션 원칙에 따라 항공편을 검색하고 추천 데이터를 생성한다.

의존성

서비스용도
AirRecommendationClient큐레이션 원칙 조회
BookableDateService예약 가능 날짜 범위
AirportService공항 정보
LocationService위치 정보
AirConsoleService검색 조건
FlightSearchService항공편 검색
AirRecommendationService추천 데이터 생성
SlackClient결과 알림

메서드

scraping

fun scraping()

큐레이션 스크래핑 배치를 실행한다.

처리 흐름:

  1. 활성 큐레이션 원칙 조회
  2. 오늘 날짜 및 시간 기반 필터링
  3. 출발일 범위 계산 (여정일수 range)
  4. 각 조건별 검색 실행
  5. 추천 데이터 생성
  6. Slack 결과 알림

filterSearchConditions (private)

private fun SearchConditionWrapper.filterSearchConditions(jobCondition: JobCondition): SearchConditionWrapper

JobCondition의 항공사 필터를 적용한다.


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 알림: 배치 결과를 #항공팀_배치로그 채널에 알림