Files
united-workforce/packages/workflow-dashboard/server/api.ts
T
xiaoju e40e41555b refactor: dashboard status-based edge routing
- Rename ConditionalEdge → StatusEdge, condition → status throughout
- Rename conditional.tsx → status.tsx, edge label shows status value
- Update trans-in/trans-out to use status field instead of condition
- Update validate to check status edges
- Align server/workflow.ts with new WorkflowPayload.graph format
- 20 dashboard tests pass

Phase 3 of #490 (closes #493)
2026-05-25 05:05:57 +00:00

79 lines
2.0 KiB
TypeScript

import { Elysia, t } from "elysia";
import type { WorkFlowSteps } from "../shared/types.ts";
import {
createWorkflow,
deleteWorkflow,
getWorkflow,
listWorkflows,
saveWorkflow,
} from "./workflow.ts";
export function createApi() {
return new Elysia({ prefix: "/api" })
.get("/health", () => ({ status: "ok" }))
.get("/workflows", () => listWorkflows())
.get("/workflows/:name", async ({ params }) => {
try {
const steps = await getWorkflow(params.name);
return steps;
} catch {
return new Response(JSON.stringify({ error: "not found" }), {
status: 404,
headers: { "Content-Type": "application/json" },
});
}
})
.post(
"/workflows",
async ({ body }) => {
await createWorkflow(body.name, body.description);
return { ok: true };
},
{
body: t.Object({
name: t.String(),
description: t.String(),
}),
},
)
.put(
"/workflows/:name",
async ({ params, body }) => {
const steps: WorkFlowSteps = typeof body === "string" ? JSON.parse(body) : body;
await saveWorkflow(params.name, steps);
return { ok: true };
},
{
body: t.Array(
t.Object({
role: t.Object({
name: t.String(),
description: t.String(),
identity: t.String(),
prepare: t.String(),
execute: t.String(),
report: t.String(),
}),
transitions: t.Array(
t.Object({
target: t.String(),
status: t.String(),
}),
),
}),
),
},
)
.delete("/workflows/:name", async ({ params }) => {
try {
await deleteWorkflow(params.name);
return { ok: true };
} catch {
return new Response(JSON.stringify({ error: "not found" }), {
status: 404,
headers: { "Content-Type": "application/json" },
});
}
});
}