- gisApi: mmsiList → vessels 필드명 백엔드 DTO 일치 - ReplaySetupPanel: datetime 포맷 ISO 'T' 유지 (백엔드 @JsonFormat 호환) - replayWebSocket: STOMP 에러/응답 로깅 강화 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { fetchJson, postJson } from './httpClient.ts'
|
|
|
|
export interface HaeguBoundary {
|
|
haegu_no: number
|
|
area_name: string | null
|
|
geom_json: string
|
|
center_lon: number
|
|
center_lat: number
|
|
}
|
|
|
|
/** CompactVesselTrack.java 기준 */
|
|
export interface VesselTrackResult {
|
|
vesselId: string
|
|
nationalCode: string
|
|
shipKindCode?: string
|
|
shipName?: string
|
|
shipType?: string
|
|
geometry: number[][]
|
|
timestamps: string[] // 백엔드가 문자열 배열로 전송
|
|
speeds: number[]
|
|
totalDistance?: number
|
|
avgSpeed?: number
|
|
maxSpeed?: number
|
|
pointCount?: number
|
|
}
|
|
|
|
/** RecentVesselPositionDto.java 기준 */
|
|
export interface RecentPosition {
|
|
mmsi: string
|
|
imo?: number
|
|
lon: number
|
|
lat: number
|
|
sog: number
|
|
cog: number
|
|
shipNm?: string
|
|
shipTy?: string
|
|
shipKindCode?: string
|
|
nationalCode?: string
|
|
lastUpdate: string
|
|
shipImagePath?: string | null
|
|
shipImageCount?: number | null
|
|
}
|
|
|
|
export const gisApi = {
|
|
getHaeguBoundaries(): Promise<HaeguBoundary[]> {
|
|
return fetchJson('/api/v1/haegu/boundaries')
|
|
},
|
|
|
|
getHaeguTracks(haeguNo: number, hours = 24): Promise<VesselTrackResult[]> {
|
|
return fetchJson(`/api/v2/tracks/haegu/${haeguNo}?hours=${hours}`)
|
|
},
|
|
|
|
getVesselTracks(mmsiList: string[], startTime: string, endTime: string): Promise<VesselTrackResult[]> {
|
|
return postJson('/api/v2/tracks/vessels', { vessels: mmsiList, startTime, endTime })
|
|
},
|
|
|
|
getRecentPositions(minutes = 10): Promise<RecentPosition[]> {
|
|
return fetchJson(`/api/v1/vessels/recent-positions?minutes=${minutes}`)
|
|
},
|
|
}
|