This repository has been archived on 2026-08-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
pi-web/src/server/machines/machineRoutes.ts
T

57 lines
2.4 KiB
TypeScript

import type { FastifyInstance } from "fastify";
import { MachineService, type CreateMachineInput, type UpdateMachineInput } from "./machineService.js";
export function registerMachineRoutes(app: FastifyInstance, machines = new MachineService()): void {
app.get("/api/machines", async () => ({ machines: await machines.list() }));
app.post<{ Body: CreateMachineInput }>("/api/machines", async (request, reply) => {
try {
return await machines.add(request.body);
} catch (error) {
return reply.code(400).send({ error: errorMessage(error) });
}
});
app.get<{ Params: { machineId: string } }>("/api/machines/:machineId/health", async (request, reply) => {
const health = await machines.health(request.params.machineId);
if (health === undefined) return reply.code(404).send({ error: "Machine not found" });
return health;
});
app.get<{ Params: { machineId: string }; Querystring: { refresh?: string } }>("/api/machines/:machineId/runtime", async (request, reply) => {
const runtime = await machines.runtime(request.params.machineId, request.query.refresh === "1");
if (runtime === undefined) return reply.code(404).send({ error: "Machine not found" });
return runtime;
});
app.get<{ Params: { machineId: string } }>("/api/machines/:machineId", async (request, reply) => {
const machine = await machines.get(request.params.machineId);
if (machine === undefined) return reply.code(404).send({ error: "Machine not found" });
return machine;
});
app.patch<{ Params: { machineId: string }; Body: UpdateMachineInput }>("/api/machines/:machineId", async (request, reply) => {
try {
const machine = await machines.update(request.params.machineId, request.body);
if (machine === undefined) return await reply.code(404).send({ error: "Machine not found" });
return machine;
} catch (error) {
return reply.code(400).send({ error: errorMessage(error) });
}
});
app.delete<{ Params: { machineId: string } }>("/api/machines/:machineId", async (request, reply) => {
try {
const removed = await machines.remove(request.params.machineId);
if (!removed) return await reply.code(404).send({ error: "Machine not found" });
return { deleted: true };
} catch (error) {
return reply.code(400).send({ error: errorMessage(error) });
}
});
}
function errorMessage(error: unknown): string {
return error instanceof Error ? error.message : String(error);
}