/** * 제어 모드 — 백엔드 API stub * * 인터페이스는 실 DB 연동 베이스로 설계. 초기 구현은 mock 응답. * 실제 API 만들 때 함수 안의 mock 만 fetch 호출로 교체. * * 향후 매핑 (예시): * listExecutionHistory → GET /api/control/executions?card_id=...&limit=... * getNodeStats → GET /api/control/nodes/{nodeId}/stats * listNodeComments → GET /api/control/nodes/{nodeId}/comments * listPresence → GET /api/control/dashboards/{dashboardId}/presence (WS 권장) * listRelations → GET /api/control/tables/{tableName}/relations * listRelatedRules → GET /api/control/cards/{cardId}/related-rules */ export interface ExecutionRecord { id: string; ts: string; // HH:MM:SS or full ISO who: string; // user@domain or "API · webhook" trig: string; // trigger reference (e.g., shipment_no) ok: boolean; ms: number; steps: number; err?: string; } export interface NodeStats { valid: boolean; lastMs: number | null; runs: number; alert: string | null; } export interface NodeComment { who: string; short: string; color: string; // RGB triplet "0,206,201" text: string; at: string; // relative time } export interface PresenceUser { name: string; short: string; color: string; mode: 'edit' | 'view'; } export interface TableRelation { from: string; to: string; label: string; type: 'auto' | 'rel'; } export interface RelatedRule { id: string; name: string; status: 'active' | 'draft' | 'sched'; lastRun: string; runs: number; successRate: number | null; nodes: number; owner: string; primary?: boolean; } /** 실행 이력 — 카드별 최근 실행 결과 */ export async function listExecutionHistory( cardId: string, options: { limit?: number } = {}, ): Promise { void cardId; void options; // TODO: GET /api/control/executions?card_id=...&limit=... return Promise.resolve([]); } /** 노드 통계 — 단일 노드의 valid/runs/lastMs/alert */ export async function getNodeStats(nodeId: string): Promise { void nodeId; // TODO: GET /api/control/nodes/{nodeId}/stats return Promise.resolve({ valid: true, lastMs: null, runs: 0, alert: null }); } /** 노드 댓글 */ export async function listNodeComments(nodeId: string): Promise { void nodeId; // TODO: GET /api/control/nodes/{nodeId}/comments return Promise.resolve([]); } /** 현재 보고 있는 사용자 (presence) */ export async function listPresence(dashboardId: string): Promise { void dashboardId; // TODO: GET /api/control/dashboards/{dashboardId}/presence (WS 권장) return Promise.resolve([]); } /** 테이블 관계 (view 모드의 fan-out 트리) */ export async function listRelations(tableName: string): Promise { void tableName; // TODO: GET /api/control/tables/{tableName}/relations return Promise.resolve([]); } /** 관련 룰 — 이 카드에 연결된 룰 목록 */ export async function listRelatedRules(cardId: string): Promise { void cardId; // TODO: GET /api/control/cards/{cardId}/related-rules return Promise.resolve([]); }