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:
Florian Wilde
2026-09-10 13:02:49 +02:00
co-authored by Claude Opus 5
parent e9a2b4b463
commit 1876ae4c6b
4 changed files with 199 additions and 0 deletions
+36
View File
@@ -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' },
},
)
}