feat(betrieb): Health-Endpunkt und Seed für eine frische Datenbank
/api/health meldet Status, Version, Instanz und Erreichbarkeit der Datenbank – ohne Anmeldung, deshalb ohne Zählstände, Namen oder Adressen. update.sh wird sich später darauf stützen. Der Seed legt die vier Bereiche an und ein erstes Verwaltungskonto aus ADMIN_EMAIL und ADMIN_PASSWORT. Er läuft mehrfach ohne Schaden; ohne ADMIN_PASSWORT entsteht ein Konto, das sich nur über OIDC oder Passkey anmelden kann. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e9a2b4b463
commit
1876ae4c6b
@@ -0,0 +1,36 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
import { VERSION } from '@/lib/version'
|
||||
import { db } from '@/server/db'
|
||||
import { aktuelleInstanz } from '@/server/instanz'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
/**
|
||||
* Auskunft fuer Betrieb und update.sh. Bewusst ohne Anmeldung, deshalb steht
|
||||
* hier nichts, was nicht ohnehin oeffentlich sein darf – insbesondere keine
|
||||
* Zaehlstaende, Namen oder Adressen.
|
||||
*/
|
||||
export async function GET() {
|
||||
let datenbank: 'ok' | 'fehler' = 'ok'
|
||||
try {
|
||||
await db.$queryRaw`SELECT 1`
|
||||
} catch {
|
||||
datenbank = 'fehler'
|
||||
}
|
||||
|
||||
const status = datenbank === 'ok' ? 'ok' : 'fehler'
|
||||
|
||||
return NextResponse.json(
|
||||
{
|
||||
status,
|
||||
version: VERSION,
|
||||
instanz: aktuelleInstanz(),
|
||||
datenbank,
|
||||
zeit: new Date().toISOString(),
|
||||
},
|
||||
{
|
||||
status: status === 'ok' ? 200 : 503,
|
||||
headers: { 'Cache-Control': 'no-store' },
|
||||
},
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user