Files
proof-of-work/workout-planner/app/api/health/route.ts
T
2026-02-28 09:27:26 -06:00

37 lines
1000 B
TypeScript

import { NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
export const dynamic = "force-dynamic";
export const revalidate = 0;
/**
* GET /api/health
* Health check endpoint — verifies both the server and database are operational.
* Used by StartOS health checks and Docker health checks.
* Excluded from auth middleware in middleware.ts.
*/
export async function GET() {
try {
// Verify database connectivity with a lightweight query
const userCount = await prisma.user.count();
return NextResponse.json({
status: "ok",
timestamp: Date.now(),
database: "connected",
users: userCount,
});
} catch (error) {
// Server is up but database is unreachable or corrupted
return NextResponse.json(
{
status: "error",
timestamp: Date.now(),
database: "disconnected",
error: error instanceof Error ? error.message : "Unknown database error",
},
{ status: 503 }
);
}
}