/** * 플로우 전용 외부 DB 연결 API */ import { FlowExternalDbConnection, CreateFlowExternalDbConnectionRequest, UpdateFlowExternalDbConnectionRequest, FlowExternalDbConnectionListResponse, FlowExternalDbConnectionResponse, FlowExternalDbConnectionTestResponse, } from "@/types/flowExternalDb"; const API_BASE = "/api/flow-external-db"; /** * 외부 DB 연결 API */ export const flowExternalDbApi = { /** * 모든 외부 DB 연결 조회 */ async getAll(activeOnly: boolean = false): Promise { const query = activeOnly ? "?activeOnly=true" : ""; try { const response = await fetch(`${API_BASE}${query}`, { credentials: "include", }); if (!response.ok) { // 오류 발생 시 빈 목록 반환 (조용히 실패) console.warn(`외부 DB 연결 목록 조회 실패: ${response.status} ${response.statusText}`); return { success: false, data: [] }; } return response.json(); } catch (error) { // 네트워크 오류 등 예외 발생 시에도 빈 목록 반환 console.error("외부 DB 연결 목록 조회 오류:", error); return { success: false, data: [] }; } }, /** * 특정 외부 DB 연결 조회 */ async getById(id: number): Promise { const response = await fetch(`${API_BASE}/${id}`, { credentials: "include", }); if (!response.ok) { throw new Error(`외부 DB 연결 조회 실패: ${response.statusText}`); } return response.json(); }, /** * 새 외부 DB 연결 생성 */ async create(request: CreateFlowExternalDbConnectionRequest): Promise { const response = await fetch(API_BASE, { method: "POST", headers: { "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify(request), }); if (!response.ok) { const error = await response.json(); throw new Error(error.message || "외부 DB 연결 생성 실패"); } return response.json(); }, /** * 외부 DB 연결 수정 */ async update(id: number, request: UpdateFlowExternalDbConnectionRequest): Promise { const response = await fetch(`${API_BASE}/${id}`, { method: "PUT", headers: { "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify(request), }); if (!response.ok) { const error = await response.json(); throw new Error(error.message || "외부 DB 연결 수정 실패"); } return response.json(); }, /** * 외부 DB 연결 삭제 */ async delete(id: number): Promise<{ success: boolean; message: string }> { const response = await fetch(`${API_BASE}/${id}`, { method: "DELETE", credentials: "include", }); if (!response.ok) { const error = await response.json(); throw new Error(error.message || "외부 DB 연결 삭제 실패"); } return response.json(); }, /** * 외부 DB 연결 테스트 */ async testConnection(id: number): Promise { const response = await fetch(`${API_BASE}/${id}/test`, { method: "POST", credentials: "include", }); const result = await response.json(); if (!response.ok) { return { success: false, message: result.message || "연결 테스트 실패", }; } return result; }, };