[FE-11] 모바일 대기질 타입·좌표 필드·라벨 매핑

작업 내용 (설계 의도)

근거: design-fe-app.md — 대기질 응답 타입 + FacilityResponse 좌표(BE 역제안) + 등급→라벨 순수 매핑.

변경 사항

  • mobile/api/types.ts:
    • AirQualityGrade 유니온 + AirQualityResponse 타입 추가(pm10/pm25/pm10Grade/pm25Grade/representativeGrade/stationName/measuredAt, null 허용) — BE 계약 1:1.
    • FacilityResponselat: number, lng: number, 지역 필드(sidoCode, sidoName, sigunguCode, sigunguName) 추가 — BE 역제안 채택 전제(FacilityResponse에 좌표·지역 노출).
  • 신규 mobile/lib/air-quality-format.ts — 등급→{ label, tokenKey } 순수 매핑, isBadOrWorse(grade)(BAD/VERY_BAD true) 순수 함수. 색 미포함(컴포넌트가 useTheme로 해석).

의존

  • 없음 (wave 1)

롤백

  • 타입 추가만. BE 역제안 미채택(좌표 미노출) 시 좌표 필드를 optional로 두고 상세/예약이 좌표 없을 때 대기질 미조회로 폴백(설계 문서 2안).

다이어그램

클래스 의존

flowchart LR
    Types[types AirQualityResponse] --> Hook[useAirQuality 후행]
    Format[air-quality-format] --> Badge[AirQualityBadge 후행]
    Format --> Warn[AirQualityWarning 후행]

테스트 케이스

  • 등급 매핑이 각 등급에 한글 라벨과 토큰키를 반환한다
  • isBadOrWorse가 BAD·VERY_BAD에 true, GOOD·MODERATE·UNKNOWN에 false를 반환한다
  • 알 수 없는 grade가 들어와도 UNKNOWN으로 폴백한다
  • FacilityResponse 타입에 lat/lng·지역 필드가 포함된다(타입 컴파일 확인)