Files
united-workforce/packages/workflow-dashboard/server/api.ts
T
xingyue 1abc3b4cf4 chore: fix all biome lint errors across monorepo
- Fix import ordering (organizeImports) across multiple packages
- Replace forEach with for...of loops (noForEach)
- Replace non-null assertions with fallback values (noNonNullAssertion)
- Add biome-ignore comments for justified noExplicitAny usages
- Remove parameter properties, use explicit class properties (noParameterProperties)
- Fix string concatenation to template literals (useTemplate)
- Fix format issues (CSS, TypeScript)
- Add tailwindDirectives CSS parser config in biome.json
- Replace var with const (noVar)

Result: 0 errors, 12 warnings (all cognitive complexity, acceptable)
2026-05-23 18:39:02 +08:00

79 lines
2.1 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(),
condition: t.Union([t.String(), t.Null()]),
}),
),
}),
),
},
)
.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" },
});
}
});
}