- 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>
116 lines
2.9 KiB
TypeScript
116 lines
2.9 KiB
TypeScript
import { api } from '@common/services/api';
|
|
|
|
export interface PredictionAnalysis {
|
|
acdntSn: number;
|
|
acdntNm: string;
|
|
occurredAt: string;
|
|
analysisDate: string;
|
|
requestor: string;
|
|
duration: string;
|
|
oilType: string;
|
|
volume: number | null;
|
|
location: string;
|
|
lat: number | null;
|
|
lon: number | null;
|
|
kospsStatus: string;
|
|
poseidonStatus: string;
|
|
opendriftStatus: string;
|
|
backtrackStatus: string;
|
|
analyst: string;
|
|
officeName: string;
|
|
}
|
|
|
|
export interface PredictionDetail {
|
|
acdnt: {
|
|
acdntSn: number;
|
|
acdntNm: string;
|
|
occurredAt: string;
|
|
lat: number | null;
|
|
lon: number | null;
|
|
location: string;
|
|
analyst: string;
|
|
officeName: string;
|
|
};
|
|
spill: {
|
|
oilType: string;
|
|
volume: number | null;
|
|
unit: string;
|
|
fcstHr: number | null;
|
|
} | null;
|
|
vessels: Array<{
|
|
vesselInfoSn: number;
|
|
imoNo: string;
|
|
vesselNm: string;
|
|
vesselTp: string;
|
|
loaM: number | null;
|
|
breadthM: number | null;
|
|
draftM: number | null;
|
|
gt: number | null;
|
|
dwt: number | null;
|
|
builtYr: number | null;
|
|
flagCd: string;
|
|
callsign: string;
|
|
engineDc: string;
|
|
insuranceData: unknown;
|
|
}>;
|
|
weather: Array<{
|
|
weatherDtm: string;
|
|
windSpd: number | null;
|
|
windDir: string | null;
|
|
waveHgt: number | null;
|
|
currentSpd: number | null;
|
|
currentDir: string | null;
|
|
temp: number | null;
|
|
}>;
|
|
}
|
|
|
|
export interface BacktrackResult {
|
|
backtrackSn: number;
|
|
acdntSn: number;
|
|
estSpilDtm: string | null;
|
|
anlysRange: string | null;
|
|
lon: number | null;
|
|
lat: number | null;
|
|
srchRadiusNm: number | null;
|
|
totalVessels: number | null;
|
|
execSttsCd: string;
|
|
rsltData: Record<string, unknown> | null;
|
|
}
|
|
|
|
export const fetchPredictionAnalyses = async (params?: {
|
|
search?: string;
|
|
}): Promise<PredictionAnalysis[]> => {
|
|
const response = await api.get<PredictionAnalysis[]>('/prediction/analyses', { params });
|
|
return response.data;
|
|
};
|
|
|
|
export const fetchPredictionDetail = async (acdntSn: number): Promise<PredictionDetail> => {
|
|
const response = await api.get<PredictionDetail>(`/prediction/analyses/${acdntSn}`);
|
|
return response.data;
|
|
};
|
|
|
|
export const fetchBacktrack = async (sn: number): Promise<BacktrackResult> => {
|
|
const response = await api.get<BacktrackResult>(`/prediction/backtrack/${sn}`);
|
|
return response.data;
|
|
};
|
|
|
|
export const fetchBacktrackByAcdnt = async (
|
|
acdntSn: number,
|
|
): Promise<BacktrackResult | null> => {
|
|
const response = await api.get<BacktrackResult[]>('/prediction/backtrack', {
|
|
params: { acdntSn },
|
|
});
|
|
return response.data.length > 0 ? response.data[0] : null;
|
|
};
|
|
|
|
export const createBacktrack = async (input: {
|
|
acdntSn: number;
|
|
lon: number;
|
|
lat: number;
|
|
srchRadiusNm?: number;
|
|
anlysRange?: string;
|
|
}): Promise<{ backtrackSn: number }> => {
|
|
const response = await api.post<{ backtrackSn: number }>('/prediction/backtrack', input);
|
|
return response.data;
|
|
};
|