55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
import { getMailer } from '@/lib/mailer'
|
|
import { db } from '@workspace/db'
|
|
import { sql } from '@workspace/db/drizzle'
|
|
|
|
export async function GET() {
|
|
try {
|
|
const envSeen = {
|
|
SMTP_URL: Boolean(process.env.SMTP_URL || process.env.MAIL_URL),
|
|
SMTP_HOST: Boolean(process.env.SMTP_HOST || process.env.MAIL_HOST),
|
|
SMTP_PORT: Boolean(process.env.SMTP_PORT || process.env.MAIL_PORT),
|
|
SMTP_USER: Boolean(process.env.SMTP_USER || process.env.SMTP_USERNAME || process.env.MAIL_USER || process.env.MAIL_USERNAME),
|
|
SMTP_PASS: Boolean(process.env.SMTP_PASS || process.env.SMTP_PASSWORD || process.env.MAIL_PASS || process.env.MAIL_PASSWORD),
|
|
SMTP_FROM: Boolean(process.env.SMTP_FROM),
|
|
}
|
|
|
|
let smtp: { ok: boolean; message?: string } = { ok: false }
|
|
try {
|
|
await getMailer().verify()
|
|
smtp = { ok: true }
|
|
} catch (e) {
|
|
smtp = { ok: false, message: e instanceof Error ? e.message : 'unknown error' }
|
|
}
|
|
|
|
let database: { ok: boolean; message?: string } = { ok: false }
|
|
try {
|
|
await db.execute(sql`select 1`)
|
|
database = { ok: true }
|
|
} catch (e) {
|
|
database = { ok: false, message: e instanceof Error ? e.message : 'unknown error' }
|
|
}
|
|
|
|
return NextResponse.json(
|
|
{
|
|
status: 'ok',
|
|
timestamp: new Date().toISOString(),
|
|
service: 'admin-app',
|
|
smtp,
|
|
database,
|
|
envSeen
|
|
},
|
|
{ status: 200 }
|
|
)
|
|
} catch (error) {
|
|
return NextResponse.json(
|
|
{
|
|
status: 'error',
|
|
message: 'Health check failed',
|
|
timestamp: new Date().toISOString(),
|
|
service: 'admin-app'
|
|
},
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|