47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { Hono } from "hono";
|
|
import { serveStatic } from "hono/deno";
|
|
import postgres from "postgres";
|
|
|
|
const app = new Hono();
|
|
|
|
// Connect to Postgres using env vars (fallback for dev)
|
|
const sql = postgres({
|
|
host: Deno.env.get("POSTGRES_HOST") || "db",
|
|
port: parseInt(Deno.env.get("POSTGRES_PORT") || "5432"),
|
|
database: Deno.env.get("POSTGRES_DB") || "nas_builder",
|
|
username: Deno.env.get("POSTGRES_USER") || "nasadmin",
|
|
password: Deno.env.get("POSTGRES_PASSWORD") || "your_secure_database_password_here",
|
|
});
|
|
|
|
// API Routes
|
|
app.get("/api/status", async (c) => {
|
|
try {
|
|
// Ping the database
|
|
const result = await sql`SELECT version()`;
|
|
return c.json({
|
|
status: "online",
|
|
database: "connected",
|
|
db_version: result[0].version,
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
} catch (error: any) {
|
|
return c.json({
|
|
status: "online",
|
|
database: "disconnected",
|
|
error: error.message
|
|
}, 500);
|
|
}
|
|
});
|
|
|
|
// Serve the 3D Viewer frontend
|
|
app.use("/*", serveStatic({ root: "./" }));
|
|
|
|
// Handle root redirect to viewer
|
|
app.get("/", (c) => c.redirect("/viewer/index.html"));
|
|
|
|
// Start the server
|
|
const port = parseInt(Deno.env.get("PORT") || "80");
|
|
console.log(`🚀 NAS-Builder Deno API starting on port ${port}...`);
|
|
|
|
Deno.serve({ port }, app.fetch);
|