- 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>
137 lines
3.3 KiB
TypeScript
137 lines
3.3 KiB
TypeScript
import { api } from '@common/services/api';
|
|
|
|
// ============================================================
|
|
// 인터페이스
|
|
// ============================================================
|
|
|
|
export interface BoardPostItem {
|
|
sn: number;
|
|
categoryCd: string;
|
|
title: string;
|
|
authorId: string;
|
|
authorName: string;
|
|
viewCnt: number;
|
|
pinnedYn: string;
|
|
regDtm: string;
|
|
}
|
|
|
|
export interface BoardPostDetail extends BoardPostItem {
|
|
content: string | null;
|
|
mdfcnDtm: string | null;
|
|
}
|
|
|
|
export interface BoardListResponse {
|
|
items: BoardPostItem[];
|
|
totalCount: number;
|
|
page: number;
|
|
size: number;
|
|
}
|
|
|
|
export interface BoardListParams {
|
|
categoryCd?: string;
|
|
search?: string;
|
|
page?: number;
|
|
size?: number;
|
|
}
|
|
|
|
export interface CreateBoardPostInput {
|
|
categoryCd: string;
|
|
title: string;
|
|
content?: string;
|
|
pinnedYn?: string;
|
|
}
|
|
|
|
export interface UpdateBoardPostInput {
|
|
title?: string;
|
|
content?: string;
|
|
pinnedYn?: string;
|
|
}
|
|
|
|
// ============================================================
|
|
// API 함수
|
|
// ============================================================
|
|
|
|
export async function fetchBoardPosts(params?: BoardListParams): Promise<BoardListResponse> {
|
|
const response = await api.get<BoardListResponse>('/board', { params });
|
|
return response.data;
|
|
}
|
|
|
|
export async function fetchBoardPost(sn: number): Promise<BoardPostDetail> {
|
|
const response = await api.get<BoardPostDetail>(`/board/${sn}`);
|
|
return response.data;
|
|
}
|
|
|
|
export async function createBoardPost(input: CreateBoardPostInput): Promise<{ sn: number }> {
|
|
const response = await api.post<{ sn: number }>('/board', input);
|
|
return response.data;
|
|
}
|
|
|
|
export async function updateBoardPost(sn: number, input: UpdateBoardPostInput): Promise<void> {
|
|
await api.put(`/board/${sn}`, input);
|
|
}
|
|
|
|
export async function deleteBoardPost(sn: number): Promise<void> {
|
|
await api.delete(`/board/${sn}`);
|
|
}
|
|
|
|
// ============================================================
|
|
// 매뉴얼 API
|
|
// ============================================================
|
|
|
|
export interface ManualItem {
|
|
manualSn: number;
|
|
catgNm: string;
|
|
title: string;
|
|
version: string | null;
|
|
fileTp: string | null;
|
|
fileSz: string | null;
|
|
filePath: string | null;
|
|
authorNm: string | null;
|
|
dwnldCnt: number;
|
|
regDtm: string;
|
|
}
|
|
|
|
export interface CreateManualInput {
|
|
catgNm: string;
|
|
title: string;
|
|
version?: string;
|
|
fileTp?: string;
|
|
fileSz?: string;
|
|
filePath?: string;
|
|
authorNm?: string;
|
|
}
|
|
|
|
export interface UpdateManualInput {
|
|
catgNm?: string;
|
|
title?: string;
|
|
version?: string;
|
|
fileTp?: string;
|
|
fileSz?: string;
|
|
filePath?: string;
|
|
}
|
|
|
|
export async function fetchManuals(params?: {
|
|
category?: string;
|
|
search?: string;
|
|
}): Promise<ManualItem[]> {
|
|
const response = await api.get<ManualItem[]>('/board/manual', { params });
|
|
return response.data;
|
|
}
|
|
|
|
export async function createManual(input: CreateManualInput): Promise<{ manualSn: number }> {
|
|
const response = await api.post<{ manualSn: number }>('/board/manual', input);
|
|
return response.data;
|
|
}
|
|
|
|
export async function updateManual(sn: number, input: UpdateManualInput): Promise<void> {
|
|
await api.put(`/board/manual/${sn}`, input);
|
|
}
|
|
|
|
export async function deleteManual(sn: number): Promise<void> {
|
|
await api.delete(`/board/manual/${sn}`);
|
|
}
|
|
|
|
export async function incrementManualDownload(sn: number): Promise<void> {
|
|
await api.post(`/board/manual/${sn}/download`);
|
|
}
|