- HNS_SUBSTANCE 테이블 마이그레이션 SQL 추가 (002_hns_substance.sql) - HNS 검색/상세 API 구현 (hnsRouter, hnsService) - HNS 시드 스크립트 추가 (seedHns.ts, 20종 물질 데이터) - 프론트엔드 HNSSubstanceView: 정적 HNS_SEARCH_DB → API 호출 전환 - HNSSearchSubstance 타입 common/types/hns.ts로 분리 - Mock 데이터 이동: data/ → common/mock/ (vesselMockData, backtrackMockData) - layerDatabase.ts → common/services/layerService.ts 이동 - layerData.ts → common/data/layerData.ts 이동 - scat/index.ts 누락 수정 + .gitignore scat 규칙 수정 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
127 lines
3.6 KiB
TypeScript
Executable File
127 lines
3.6 KiB
TypeScript
Executable File
import type { BacktrackConditions, BacktrackVessel, ReplayShip, CollisionEvent } from '@common/types/backtrack'
|
|
|
|
export const MOCK_CONDITIONS: BacktrackConditions = {
|
|
estimatedSpillTime: '02-10 06:30',
|
|
analysisRange: '±12시간',
|
|
searchRadius: '10 NM',
|
|
spillLocation: { lat: 34.7312, lon: 127.6845 },
|
|
totalVessels: 47,
|
|
}
|
|
|
|
export const MOCK_VESSELS: BacktrackVessel[] = [
|
|
{
|
|
rank: 1,
|
|
name: 'ORIENTAL GLORY',
|
|
imo: '9412856',
|
|
type: '유조선',
|
|
flag: '🇰🇷',
|
|
flagCountry: '대한민국',
|
|
probability: 96.7,
|
|
closestTime: '06:28',
|
|
closestDistance: 0.02,
|
|
speedChange: '급감속',
|
|
aisStatus: '충돌신호',
|
|
description: '06:28 HAI FENG 168과 충돌 → 06:30 No.1P 탱크 파공 → 벙커C유 유출 개시. AIS 충돌경보 발신, 속력 8.3kts→0.2kts 급감속.',
|
|
color: '#ef4444',
|
|
},
|
|
{
|
|
rank: 2,
|
|
name: 'HAI FENG 168',
|
|
imo: '9538721',
|
|
type: '벌크선',
|
|
flag: '🇨🇳',
|
|
flagCountry: '중국',
|
|
probability: 23.4,
|
|
closestTime: '06:28',
|
|
closestDistance: 0.02,
|
|
speedChange: '급감속',
|
|
aisStatus: '미확인',
|
|
description: '충돌 당사선. 구상선수 손상으로 연료유탱크 미세 누유 가능성. 자체 연료(벙커C) 1,200톤 적재.',
|
|
color: '#f97316',
|
|
},
|
|
{
|
|
rank: 3,
|
|
name: 'DONG JIN STAR',
|
|
imo: '9287403',
|
|
type: '케미컬탱커',
|
|
flag: '🇰🇷',
|
|
flagCountry: '대한민국',
|
|
probability: 4.1,
|
|
closestTime: '05:45',
|
|
closestDistance: 1.8,
|
|
speedChange: '정상',
|
|
aisStatus: '정상',
|
|
description: '',
|
|
color: '#64788c',
|
|
},
|
|
]
|
|
|
|
export const MOCK_REPLAY_SHIPS: ReplayShip[] = [
|
|
{
|
|
vesselName: 'ORIENTAL GLORY',
|
|
color: '#ef4444',
|
|
path: [
|
|
{ lat: 34.82, lon: 127.58 },
|
|
{ lat: 34.80, lon: 127.60 },
|
|
{ lat: 34.78, lon: 127.62 },
|
|
{ lat: 34.76, lon: 127.64 },
|
|
{ lat: 34.75, lon: 127.66 },
|
|
{ lat: 34.74, lon: 127.67 },
|
|
{ lat: 34.73, lon: 127.68 },
|
|
{ lat: 34.7312, lon: 127.6845 },
|
|
{ lat: 34.7312, lon: 127.6845 },
|
|
],
|
|
speedLabels: [
|
|
'8.3 kts · 215°', '8.3 kts · 215°', '8.3 kts · 215°',
|
|
'8.3 kts · 215°', '8.3 kts · 215°', '8.3 kts · 215°',
|
|
'2.1 kts · 215°', '0.2 kts · 정지', '0.2 kts · 정지',
|
|
],
|
|
},
|
|
{
|
|
vesselName: 'HAI FENG 168',
|
|
color: '#f97316',
|
|
path: [
|
|
{ lat: 34.64, lon: 127.78 },
|
|
{ lat: 34.66, lon: 127.76 },
|
|
{ lat: 34.68, lon: 127.74 },
|
|
{ lat: 34.70, lon: 127.72 },
|
|
{ lat: 34.71, lon: 127.71 },
|
|
{ lat: 34.72, lon: 127.70 },
|
|
{ lat: 34.73, lon: 127.69 },
|
|
{ lat: 34.7312, lon: 127.6845 },
|
|
{ lat: 34.7315, lon: 127.6840 },
|
|
],
|
|
speedLabels: [
|
|
'11.2 kts · 038°', '11.2 kts · 038°', '11.2 kts · 038°',
|
|
'11.2 kts · 038°', '11.2 kts · 038°', '11.2 kts · 038°',
|
|
'3.4 kts · 038°', '0.5 kts · 정지', '0.5 kts · 정지',
|
|
],
|
|
},
|
|
{
|
|
vesselName: 'DONG JIN STAR',
|
|
color: '#64788c',
|
|
path: [
|
|
{ lat: 34.82, lon: 127.52 },
|
|
{ lat: 34.80, lon: 127.53 },
|
|
{ lat: 34.78, lon: 127.54 },
|
|
{ lat: 34.76, lon: 127.55 },
|
|
{ lat: 34.74, lon: 127.56 },
|
|
{ lat: 34.72, lon: 127.57 },
|
|
{ lat: 34.70, lon: 127.58 },
|
|
{ lat: 34.68, lon: 127.59 },
|
|
{ lat: 34.66, lon: 127.60 },
|
|
],
|
|
speedLabels: [
|
|
'10.5 kts · 180°', '10.5 kts · 180°', '10.5 kts · 180°',
|
|
'10.5 kts · 180°', '10.5 kts · 180°', '10.5 kts · 180°',
|
|
'10.5 kts · 180°', '10.5 kts · 180°', '10.5 kts · 180°',
|
|
],
|
|
},
|
|
]
|
|
|
|
export const MOCK_COLLISION: CollisionEvent = {
|
|
position: { lat: 34.7312, lon: 127.6845 },
|
|
timeLabel: '06:28 충돌',
|
|
progressPercent: 75,
|
|
}
|