import client from './client'; import type { PaginatedResponse } from './types'; export interface NodeDef { id: string; type: 'StartEvent' | 'EndEvent' | 'UserTask' | 'ServiceTask' | 'ExclusiveGateway' | 'ParallelGateway'; name: string; assignee_id?: string; candidate_groups?: string[]; service_type?: string; position?: { x: number; y: number }; } export interface EdgeDef { id: string; source: string; target: string; condition?: string; label?: string; } export interface ProcessDefinitionInfo { id: string; name: string; key: string; version: number; category?: string; description?: string; nodes: NodeDef[]; edges: EdgeDef[]; status: string; created_at: string; updated_at: string; } export interface CreateProcessDefinitionRequest { name: string; key: string; category?: string; description?: string; nodes: NodeDef[]; edges: EdgeDef[]; } export interface UpdateProcessDefinitionRequest { name?: string; category?: string; description?: string; nodes?: NodeDef[]; edges?: EdgeDef[]; } export async function listProcessDefinitions(page = 1, pageSize = 20) { const { data } = await client.get<{ success: boolean; data: PaginatedResponse }>( '/workflow/definitions', { params: { page, page_size: pageSize } }, ); return data.data; } export async function getProcessDefinition(id: string) { const { data } = await client.get<{ success: boolean; data: ProcessDefinitionInfo }>( `/workflow/definitions/${id}`, ); return data.data; } export async function createProcessDefinition(req: CreateProcessDefinitionRequest) { const { data } = await client.post<{ success: boolean; data: ProcessDefinitionInfo }>( '/workflow/definitions', req, ); return data.data; } export async function updateProcessDefinition(id: string, req: UpdateProcessDefinitionRequest) { const { data } = await client.put<{ success: boolean; data: ProcessDefinitionInfo }>( `/workflow/definitions/${id}`, req, ); return data.data; } export async function publishProcessDefinition(id: string) { const { data } = await client.post<{ success: boolean; data: ProcessDefinitionInfo }>( `/workflow/definitions/${id}/publish`, ); return data.data; }