150 lines
4.3 KiB
TypeScript
150 lines
4.3 KiB
TypeScript
|
|
/**
|
||
|
|
* 플로우 전용 외부 DB 연동 타입 정의
|
||
|
|
* (기존 제어관리 외부 DB와 별도)
|
||
|
|
*/
|
||
|
|
|
||
|
|
// ==================== 연동 타입 ====================
|
||
|
|
|
||
|
|
export type FlowIntegrationType = "internal" | "external_db" | "rest_api" | "webhook" | "hybrid";
|
||
|
|
|
||
|
|
// ==================== 외부 DB 연결 ====================
|
||
|
|
|
||
|
|
export interface FlowExternalDbConnection {
|
||
|
|
id: number;
|
||
|
|
name: string;
|
||
|
|
description?: string;
|
||
|
|
dbType: "postgresql" | "mysql" | "mssql" | "oracle";
|
||
|
|
host: string;
|
||
|
|
port: number;
|
||
|
|
databaseName: string;
|
||
|
|
username: string;
|
||
|
|
passwordEncrypted: string; // 암호화된 비밀번호 (화면에는 표시하지 않음)
|
||
|
|
sslEnabled: boolean;
|
||
|
|
connectionOptions?: Record<string, any>;
|
||
|
|
isActive: boolean;
|
||
|
|
createdBy?: string;
|
||
|
|
updatedBy?: string;
|
||
|
|
createdAt: string;
|
||
|
|
updatedAt: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface CreateFlowExternalDbConnectionRequest {
|
||
|
|
name: string;
|
||
|
|
description?: string;
|
||
|
|
dbType: "postgresql" | "mysql" | "mssql" | "oracle";
|
||
|
|
host: string;
|
||
|
|
port: number;
|
||
|
|
databaseName: string;
|
||
|
|
username: string;
|
||
|
|
password: string; // 평문 비밀번호 (생성 시에만 사용)
|
||
|
|
sslEnabled?: boolean;
|
||
|
|
connectionOptions?: Record<string, any>;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface UpdateFlowExternalDbConnectionRequest {
|
||
|
|
name?: string;
|
||
|
|
description?: string;
|
||
|
|
host?: string;
|
||
|
|
port?: number;
|
||
|
|
databaseName?: string;
|
||
|
|
username?: string;
|
||
|
|
password?: string; // 평문 비밀번호 (변경 시에만)
|
||
|
|
sslEnabled?: boolean;
|
||
|
|
connectionOptions?: Record<string, any>;
|
||
|
|
isActive?: boolean;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==================== 외부 DB 연동 설정 ====================
|
||
|
|
|
||
|
|
export interface FlowExternalDbIntegrationConfig {
|
||
|
|
type: "external_db";
|
||
|
|
connectionId: number; // 연결 ID
|
||
|
|
operation: "update" | "insert" | "delete" | "custom";
|
||
|
|
tableName: string;
|
||
|
|
updateFields?: Record<string, any>; // 업데이트할 필드
|
||
|
|
whereCondition?: Record<string, any>; // WHERE 조건
|
||
|
|
customQuery?: string; // 커스텀 쿼리
|
||
|
|
}
|
||
|
|
|
||
|
|
// 연동 설정 통합 타입
|
||
|
|
export type FlowIntegrationConfig = FlowExternalDbIntegrationConfig;
|
||
|
|
|
||
|
|
// ==================== 연동 로그 ====================
|
||
|
|
|
||
|
|
export interface FlowIntegrationLog {
|
||
|
|
id: number;
|
||
|
|
flowDefinitionId: number;
|
||
|
|
stepId: number;
|
||
|
|
dataId?: string;
|
||
|
|
integrationType: string;
|
||
|
|
connectionId?: number;
|
||
|
|
requestPayload?: Record<string, any>;
|
||
|
|
responsePayload?: Record<string, any>;
|
||
|
|
status: "success" | "failed" | "timeout" | "rollback";
|
||
|
|
errorMessage?: string;
|
||
|
|
executionTimeMs?: number;
|
||
|
|
executedBy?: string;
|
||
|
|
executedAt: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==================== API 응답 ====================
|
||
|
|
|
||
|
|
export interface FlowExternalDbConnectionListResponse {
|
||
|
|
success: boolean;
|
||
|
|
data: FlowExternalDbConnection[];
|
||
|
|
message?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface FlowExternalDbConnectionResponse {
|
||
|
|
success: boolean;
|
||
|
|
data?: FlowExternalDbConnection;
|
||
|
|
message?: string;
|
||
|
|
error?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface FlowExternalDbConnectionTestResponse {
|
||
|
|
success: boolean;
|
||
|
|
message: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==================== UI 관련 ====================
|
||
|
|
|
||
|
|
export const DB_TYPE_OPTIONS = [
|
||
|
|
{ value: "postgresql", label: "PostgreSQL" },
|
||
|
|
{ value: "mysql", label: "MySQL" },
|
||
|
|
{ value: "mssql", label: "MS SQL Server" },
|
||
|
|
{ value: "oracle", label: "Oracle" },
|
||
|
|
] as const;
|
||
|
|
|
||
|
|
export const OPERATION_OPTIONS = [
|
||
|
|
{ value: "update", label: "업데이트 (UPDATE)" },
|
||
|
|
{ value: "insert", label: "삽입 (INSERT)" },
|
||
|
|
{ value: "delete", label: "삭제 (DELETE)" },
|
||
|
|
{ value: "custom", label: "커스텀 쿼리" },
|
||
|
|
] as const;
|
||
|
|
|
||
|
|
export const INTEGRATION_TYPE_OPTIONS = [
|
||
|
|
{ value: "internal", label: "내부 DB (기본)" },
|
||
|
|
{ value: "external_db", label: "외부 DB 연동" },
|
||
|
|
{ value: "rest_api", label: "REST API (추후 지원)" },
|
||
|
|
{ value: "webhook", label: "Webhook (추후 지원)" },
|
||
|
|
{ value: "hybrid", label: "복합 연동 (추후 지원)" },
|
||
|
|
] as const;
|
||
|
|
|
||
|
|
// ==================== 헬퍼 함수 ====================
|
||
|
|
|
||
|
|
export function getDbTypeLabel(dbType: string): string {
|
||
|
|
const option = DB_TYPE_OPTIONS.find((opt) => opt.value === dbType);
|
||
|
|
return option?.label || dbType;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getOperationLabel(operation: string): string {
|
||
|
|
const option = OPERATION_OPTIONS.find((opt) => opt.value === operation);
|
||
|
|
return option?.label || operation;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getIntegrationTypeLabel(type: string): string {
|
||
|
|
const option = INTEGRATION_TYPE_OPTIONS.find((opt) => opt.value === type);
|
||
|
|
return option?.label || type;
|
||
|
|
}
|