feat: add health check route

Implement handleHealth endpoint for Bun.serve to verify DB connection.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
MythEclipse
2026-05-18 07:10:55 +07:00
co-authored by Claude Opus 4.7
parent d915814277
commit be93a06918
2 changed files with 54 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
import logger from '../utils/logger.js';
import { db } from '../db/index.js';
import { sql } from 'drizzle-orm';
export const handleHealth = async (req) => {
try {
await db.execute(sql`SELECT 1`);
return Response.json({ status: 'ok' }, { status: 200 });
} catch (error) {
logger.error('Health check failed', { error: error.message });
return Response.json({ status: 'error', error: error.message }, { status: 500 });
}
};
+41
View File
@@ -0,0 +1,41 @@
import { describe, it, expect, mock, beforeEach } from "bun:test";
// Mock database layer
const mockExecute = mock(() => Promise.resolve());
mock.module("../src/db/index.js", () => ({
db: {
execute: mockExecute
}
}));
describe("Health Route Handler", () => {
let handleHealth;
beforeEach(async () => {
mockExecute.mockClear();
const healthRoute = await import("../src/routes/health.js");
handleHealth = healthRoute.handleHealth;
});
it("should return status 200 and ok when DB is healthy", async () => {
const req = new Request("http://localhost:3000/health");
const res = await handleHealth(req);
expect(res.status).toBe(200);
const body = await res.json();
expect(body).toEqual({ status: "ok" });
expect(mockExecute).toHaveBeenCalled();
});
it("should return status 500 and error details when DB health check fails", async () => {
mockExecute.mockImplementationOnce(() => Promise.reject(new Error("DB Connection Failed")));
const req = new Request("http://localhost:3000/health");
const res = await handleHealth(req);
expect(res.status).toBe(500);
const body = await res.json();
expect(body.status).toBe("error");
expect(body.error).toBe("DB Connection Failed");
});
});