AS-IS


01. 아키텍처

// content / inavtive 
Scheduler (ExpediaBatchScheduler)
  ├─ syncHotelInfo()
  ├─ syncInactiveHotelInfo()
       ↓
Service (ExpediaSyncHotelServiceImpl)
  └─ expediaHotelInfoSync()
       ↓
DAO (직접 호출)

// regions
Scheduler (syncExpediaCityInfoTrigger)
  ├─ syncCityInfo()
       ↓
Service (expediaSyncCityService)
  └─ syncCityInfo()
       ↓
DAO (직접 호출)

02. 흐름도

graph TD
    A[스케줄러 시작] --> B[ExpediaBatchScheduler]
    B --> C{언어 타입 체크}
    
    C -->|languageType 있음| D[콘텐츠 동기화]
    C -->|languageType 없음| E[비활성화 + 룸그룹]
    
    D --> D1[배치 이력 생성]
    D1 --> D2[마지막 업데이트 날짜 조회]
    D2 --> D3[국가 목록 조회]
    D3 --> D4{국가 Loop}
    D4 --> D5[도시 정보 API 호출]
    D5 --> D6[호텔 정보 API 호출]
    D6 --> D7{호텔 Loop}
    D7 --> D8[expediaHotelInfoSync]
    D8 --> D9[호텔 기본정보 저장]
    D9 --> D10[이미지 저장]
    D10 --> D11[시설 저장]
    D11 --> D12[테마 저장]
    D12 --> D13[객실 저장]
    D13 --> D14[주소 저장]
    D14 --> D15[마스터 호텔 업데이트]
    D15 --> D7
    D7 --> D4
    D4 --> D16[배치 이력 완료]
    
    E --> E1[비활성화 동기화]
    E1 --> E2[-7일 날짜 계산]
    E2 --> E3[Inactive API 호출]
    E3 --> E4[100개 단위 파티션]
    E4 --> E5[UseYn 업데이트]
    E5 --> E6[룸그룹 동기화]
    E6 --> E7[국가별 처리]
    E7 --> E8[50개 단위 파티션]
    E8 --> E9[호텔 정보 조회]
    E9 --> E10[룸그룹 업데이트]
    
    style D8 fill:#ff6b6b
    style D4 fill:#ffe66d
    style D7 fill:#ffe66d

graph TD
    A[스케줄러 시작<br/>매일 04:00] --> B[ExpediaSyncCityService]
    B --> C{프로덕션<br/>환경 체크}

    C -->|production 아님| Z[종료]
    C -->|production| D[도시 동기화 시작]

    D --> D1[배치 카운터 초기화<br/>TOTAL/SUCCESS/FAIL = 0]
    D1 --> D2[마지막 배치 이력 조회<br/>기본: 2015-01-01]
    D2 --> D3[공급사 국가 목록 조회<br/>HotelSyncDAO]
    D3 --> D4{국가 Loop}

    D4 --> D5[SupplierCityInfoRequest 생성<br/>nationIso2 설정]
    D5 --> D6[Geography API 호출<br/>/geography/properties]
    D6 --> D7{페이지 Loop<br/>token 존재?}

    D7 --> D8[JSON 응답 파싱]
    D8 --> D9{도시 데이터 Loop}

    D9 --> D10{type = 'city'?}
    D10 -->|아니오| D9
    D10 -->|예| D11{호텔 ID 존재?}
    D11 -->|아니오| D9
    D11 -->|예| D12[expediaCityInfoSync]

    D12 --> D13[SupplierCityInfoVO 생성]
    D13 --> D14[데이터 정제<br/>HTML/이모지/길이제한]
    D14 --> D15[국가 코드 변환<br/>HK→CN]
    D15 --> D16[호텔 ID 250개 단위 분할]
    D16 --> D17[리스트 추가<br/>TOTAL_CNT++]

    D17 --> D18{리스트 크기<br/>>= 1000?}
    D18 -->|예| D19[1000개 배치 저장<br/>insertUpdateSupplierCityInfoList]
    D19 --> D20[SUCCESS_CNT 증가]
    D20 --> D21[리스트 초기화]
    D21 --> D9
    D18 -->|아니오| D9

    D9 --> D7
    D7 --> D4
    D4 --> D22[남은 데이터 저장]
    D22 --> D23[배치 이력 기록<br/>총/성공/실패 건수]
    D23 --> D24[완료 로그 출력<br/>소요 시간]

    style D12 fill:#ff6b6b
    style D4 fill:#ffe66d
    style D7 fill:#ffe66d
    style D9 fill:#ffe66d
    style D19 fill:#4ecdc4
    style D23 fill:#95e1d3