wing-ops/frontend/src/tabs/rescue/services/rescueApi.ts
htlee ff085252b0 feat(phase4): Board/HNS/Prediction/Aerial/Rescue Mock → API 전환
- Board: 매뉴얼 CRUD + 첨부파일 API (012_board_ext.sql)
- HNS: 분석 CRUD 5개 API (013_hns_analysis.sql)
- Prediction: 분석/역추적/오일펜스 7개 API (014_prediction.sql)
- Aerial: 미디어/CCTV/위성 6개 API + PostGIS (015_aerial.sql)
- Rescue: 구난 작전/시나리오 3개 API + JSONB (016_rescue.sql)
- backtrackMockData.ts 삭제

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:17:10 +09:00

73 lines
2.1 KiB
TypeScript

import { api } from '@common/services/api';
// ============================================================
// 구조 시나리오 API
// ============================================================
// === RESCUE_OPS ===
export interface RescueOpsItem {
rescueOpsSn: number;
acdntSn: number | null;
opsCd: string;
acdntTpCd: string;
vesselNm: string;
commanderNm: string | null;
lon: number | null;
lat: number | null;
locDc: string | null;
depthM: number | null;
currentDc: string | null;
gmM: number | null;
listDeg: number | null;
trimM: number | null;
buoyancyPct: number | null;
oilRateLpm: number | null;
bmRatioPct: number | null;
totalCrew: number | null;
survivors: number | null;
missing: number | null;
hydroData: Record<string, unknown> | null;
gmdssData: Record<string, unknown> | null;
sttsCd: string;
regDtm: string;
}
// === RESCUE_SCENARIO ===
export interface RescueScenarioItem {
scenarioSn: number;
rescueOpsSn: number;
timeStep: string;
scenarioDtm: string | null;
svrtCd: string; // CRITICAL/HIGH/MEDIUM/RESOLVED
gmM: number | null;
listDeg: number | null;
trimM: number | null;
buoyancyPct: number | null;
oilRateLpm: number | null;
bmRatioPct: number | null;
description: string | null;
compartments: Array<{ name: string; status: string; color: string }> | null;
assessment: Array<{ label: string; value: string; color: string }> | null;
actions: Array<{ time: string; text: string; color: string }> | null;
sortOrd: number;
}
export async function fetchRescueOps(params?: {
sttsCd?: string;
acdntTpCd?: string;
search?: string;
}): Promise<RescueOpsItem[]> {
const response = await api.get<RescueOpsItem[]>('/rescue/ops', { params });
return response.data;
}
export async function fetchRescueOpsDetail(sn: number): Promise<RescueOpsItem> {
const response = await api.get<RescueOpsItem>(`/rescue/ops/${sn}`);
return response.data;
}
export async function fetchRescueScenarios(rescueOpsSn: number): Promise<RescueScenarioItem[]> {
const response = await api.get<RescueScenarioItem[]>(`/rescue/ops/${rescueOpsSn}/scenarios`);
return response.data;
}