[FE-12] 모바일 대기질 조회 API + useAirQuality 훅

작업 내용 (설계 의도)

근거: design-fe-app.md FR-12/13 — 대기질 조회(BE 경유, TanStack Query). 외부 API 직접 호출 금지.

변경 사항

  • 신규 mobile/api/air-quality.tsgetAirQuality(lat, lng)getBeClient().get<AirQualityResponse>('/air-quality', { params: { lat, lng } }). 기존 axios be-client 패턴.
  • 신규 mobile/lib/useAirQuality.tsuseQuery(['air-quality', lat, lng], () => getAirQuality(lat,lng), { enabled: lat!=null && lng!=null }). staleTime 상속. BE가 실패 시 200+UNKNOWN 반환 → 쿼리는 success, 폴백 판단은 컴포넌트.

의존

  • FE-11 (AirQualityResponse 타입)

다이어그램

처리 흐름

sequenceDiagram
    participant H as useAirQuality
    participant A as api/air-quality
    participant B as BE /air-quality
    H->>A: getAirQuality(lat,lng)
    A->>B: GET /air-quality
    B-->>A: 200 (값 or UNKNOWN)
    A-->>H: AirQualityResponse

테스트 케이스

  • 좌표가 주어지면 훅이 대기질 데이터를 반환한다
  • 좌표가 null이면 enabled=false로 조회하지 않는다
  • API 실패 시 훅이 에러 상태를 노출한다
  • BE UNKNOWN 응답을 success 데이터로 담는다(폴백은 컴포넌트 판단)