feat: add project management microservice

This commit is contained in:
lyon
2026-06-25 16:34:59 +08:00
parent c474a19de6
commit de8ebb51c3
12 changed files with 1132 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bun
import { createProjectManagementApp } from "../../internal/project-management/server.ts";
import { createProjectManagementStore } from "../../internal/project-management/store.ts";
const host = process.env.HWLAB_PROJECT_MANAGEMENT_HOST || "0.0.0.0";
const port = parsePort(process.env.HWLAB_PROJECT_MANAGEMENT_PORT, parsePort(process.env.PORT, 6672));
const store = createProjectManagementStore({ env: process.env });
const app = createProjectManagementApp({ env: process.env, store });
void app.initialize().catch((error) => {
console.warn(JSON.stringify({
serviceId: "hwlab-project-management",
event: "project-management-startup-initialize-failed",
code: error?.code ?? "project_management_initialize_failed",
message: error?.message ?? String(error)
}));
});
const runtime = Bun.serve({
hostname: host,
port,
fetch: (request) => app.fetch(request)
});
process.stdout.write(`${JSON.stringify({
serviceId: "hwlab-project-management",
status: "listening",
host,
port: runtime.port,
routes: [
"/health/live",
"/health/ready",
"/v1/project-management/navigation",
"/v1/project-management/projects",
"/v1/project-management/mdtodo/sources",
"/v1/project-management/mdtodo/files",
"/v1/project-management/mdtodo/tasks",
"/v1/project-management/workbench-links"
]
})}\n`);
for (const signal of ["SIGINT", "SIGTERM"]) {
process.on(signal, async () => {
runtime.stop(true);
await app.close();
process.exit(0);
});
}
function parsePort(value: unknown, fallback: number): number {
const parsed = Number.parseInt(String(value ?? ""), 10);
return Number.isInteger(parsed) && parsed > 0 && parsed < 65536 ? parsed : fallback;
}