/** * 선박 신호 API * 참조: mda-react-front/src/api/query.ts - getAllSignals() */ import { parsePipeMessage, rowToShipObject } from '../common/stompClient'; /** * 12분 이내 전체 선박 신호 조회 * STOMP 구독 전에 호출하여 초기 선박 데이터 로드 * * @returns {Promise} 선박 데이터 배열 */ 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;