Worker- und PDF-Dienst

Der Worker hängt am Discord-Gateway und schreibt alle 30 Sekunden sein
Lebenszeichen in die Datenbank, damit /api/health im Web-Container den
Gateway-Zustand kennt, ohne selbst mit Discord zu sprechen. healthcheck.js
prüft genau dieses Lebenszeichen. Der eigentliche Rollen-Abgleich kommt in
Phase 1.

Der PDF-Dienst rendert die Druckansicht über Playwright. Kein PDF-Layout von
Hand, die Gestaltung kommt aus @media print der Seite selbst. Er kennt keine
Rechte: wer darf, entscheidet die Web-App, bevor sie hier anfragt, und schickt
das Sitzungs-Cookie des Abrufers mit, damit die gerenderte Seite dessen
Freigabestufe sieht.
This commit is contained in:
Harlekin
2026-09-01 00:01:49 +02:00
parent ade977538d
commit 8375d1cb03
13 changed files with 374 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
import type { PrismaClient } from '@afis/db'
export type HeartbeatStatus = 'up' | 'degraded' | 'down'
/**
* Der Worker schreibt sein Lebenszeichen in die Datenbank, damit /api/health im
* Web-Container den Gateway-Zustand kennt, ohne selbst mit Discord zu sprechen.
* Siehe docs/11-betrieb.md.
*/
export async function writeHeartbeat(
db: PrismaClient,
status: HeartbeatStatus,
detail?: string,
): Promise<void> {
await db.serviceHeartbeat.upsert({
where: { service: 'worker' },
create: { service: 'worker', status, detail: detail ?? null },
update: { status, detail: detail ?? null, at: new Date() },
})
}