ship-gis/src/api/signalApi.js

52 lines
1.5 KiB
JavaScript
Raw Normal View 히스토리

/**
* 선박 신호 API
* 참조: mda-react-front/src/api/query.ts - getAllSignals()
*/
import { parsePipeMessage, rowToShipObject } from '../common/stompClient';
/**
* 12 이내 전체 선박 신호 조회
* STOMP 구독 전에 호출하여 초기 선박 데이터 로드
*
* @returns {Promise<Array>} 선박 데이터 배열
*/
export async function fetchAllSignals() {
try {
const response = await fetch('/signal-api/all/12');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
// API 응답 구조: { data: [...] } 또는 직접 배열
const rawData = result?.data || result || [];
if (!Array.isArray(rawData)) {
console.warn('[fetchAllSignals] Invalid response format:', result);
return [];
}
// 각 행을 선박 객체로 변환
const ships = rawData.map((row) => {
// row가 문자열이면 파이프로 파싱, 배열이면 그대로 사용
const parsed = typeof row === 'string' ? parsePipeMessage(row) : row;
return rowToShipObject(parsed);
});
// 좌표가 있는 선박만 필터링
const validShips = ships.filter(s => s.longitude && s.latitude);
console.log(`[fetchAllSignals] Loaded ${validShips.length}/${ships.length} ships (with coords)`);
return validShips;
} catch (error) {
console.error('[fetchAllSignals] Error:', error);
return [];
}
}
export default fetchAllSignals;