custom-nas/main.ts

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);