From 3c7cdbbbf361a7a44c607248e784ee37e01702ce Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Sat, 12 Sep 2026 04:51:37 +0200 Subject: [PATCH] chore: Demo-Daten, Bildaufnahme und Platz in der Kopfleiste MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Demo-Instanz redet mit niemandem mehr: Solange DEMO_MODUS gilt, starten die Jobs fuer Zammad, Telegram und den Spiegel gar nicht erst. Sie ist mit erfundenen Daten gefuellt und steht nur fuer Bilder — ein Aufruf nach draussen waere bestenfalls sinnlos. Die Kopfleiste ist breiter als die Inhaltsspalte. Mit dem elften Eintrag passte sie dort nicht mehr, und "Einstellungen" verschwand stillschweigend am rechten Rand. Aufgefallen ist das erst im aufgenommenen Bild. Der Kartentext beschrieb noch den Weg von vor dem Kopplungscode. Co-Authored-By: Claude Opus 5 --- docker-compose.screenshots.yml | 5 +++ prisma/demo-seed.ts | 47 ++++++++++++++++++++++++++++ screenshots/bilder.spec.ts | 1 + src/app/(app)/integrationen/page.tsx | 7 ++--- src/components/kopfleiste.tsx | 8 ++++- src/server/jobs.ts | 11 +++++-- 6 files changed, 71 insertions(+), 8 deletions(-) diff --git a/docker-compose.screenshots.yml b/docker-compose.screenshots.yml index f226003..6f0f2f9 100644 --- a/docker-compose.screenshots.yml +++ b/docker-compose.screenshots.yml @@ -68,5 +68,10 @@ services: # moeglich, hinaus geht trotzdem nichts. SMTP_HOST: smtp.planer.invalid SMTP_ABSENDER: Planer + # Erfundene Werte, damit die Seite "Integrationen" den eingerichteten + # Fall zeigt. Nach draussen geht davon nichts: Die Jobs schweigen, + # solange DEMO_MODUS true ist. + TELEGRAM_TOKEN: 000000:demo-token-ohne-funktion + SPIEGEL_GEHEIMNIS: demo-geheimnis-ohne-funktion ports: - '${SCREENSHOT_APP_PORT:-3200}:3000' diff --git a/prisma/demo-seed.ts b/prisma/demo-seed.ts index 7e81a9c..4830f74 100644 --- a/prisma/demo-seed.ts +++ b/prisma/demo-seed.ts @@ -429,6 +429,7 @@ async function main(): Promise { anlaesse: 'tagesueberblick,faelligkeit,zeitblock', perPush: true, perMail: true, + perTelegram: true, ueberblickUm: 7 * 60, ruheVon: 20 * 60, ruheBis: 7 * 60, @@ -442,6 +443,52 @@ async function main(): Promise { // nicht lesen kann. Ein erfundener Eintrag verschwände beim ersten Lauf // wieder — die Bilder zeigen deshalb den Zustand vor der ersten Anmeldung. + // --- Integrationen -------------------------------------------------------- + await db.integrationszustand.deleteMany({}) + await db.integrationszustand.create({ + data: { + quelle: 'TELEGRAM', + merker: '4711', + letzterLauf: new Date(Date.UTC(2026, 2, 17, 8, 18)), + letzterErfolg: new Date(Date.UTC(2026, 2, 17, 8, 18)), + }, + }) + await db.integrationszustand.create({ + data: { + quelle: 'SPIEGEL', + letzterLauf: new Date(Date.UTC(2026, 2, 17, 8, 15)), + letzterErfolg: new Date(Date.UTC(2026, 2, 17, 8, 15)), + }, + }) + + await db.telegramChat.deleteMany({}) + await db.telegramChat.create({ + data: { + // Erfunden. Der Bot ist ohnehin abgeschaltet, solange DEMO_MODUS gilt. + chatId: BigInt(147258369), + benutzerId: benutzer.id, + bezeichnung: 'Martina', + erstelltAm: new Date(Date.UTC(2026, 1, 3, 8, 25)), + zuletztBenutzt: new Date(Date.UTC(2026, 2, 17, 6, 40)), + }, + }) + + // Dienstliche Belegung, wie sie aus der Firma hereinkaeme: ohne Titel. + await db.spiegelbelegung.deleteMany({}) + for (const [tag, stunde, dauer] of [ + [17, 9, 2], + [18, 13, 3], + [19, 8, 1], + ] as const) { + await db.spiegelbelegung.create({ + data: { + quelleRef: `demo-spiegel-${tag}-${stunde}`, + beginn: new Date(Date.UTC(2026, 2, tag, stunde - 1, 0)), + ende: new Date(Date.UTC(2026, 2, tag, stunde - 1 + dauer, 0)), + }, + }) + } + console.log(`Demo-Daten stehen bereit. Anmeldung: ${DEMO_EMAIL}`) } diff --git a/screenshots/bilder.spec.ts b/screenshots/bilder.spec.ts index 15f69a2..da824ef 100644 --- a/screenshots/bilder.spec.ts +++ b/screenshots/bilder.spec.ts @@ -43,6 +43,7 @@ const AUFNAHMEN: Aufnahme[] = [ { name: 'ideen', pfad: '/ideen' }, { name: 'bereiche', pfad: '/bereiche' }, { name: 'kalenderkonten', pfad: '/kalenderkonten' }, + { name: 'integrationen', pfad: '/integrationen' }, { name: 'einstellungen', pfad: '/einstellungen' }, { name: 'benachrichtigungen', diff --git a/src/app/(app)/integrationen/page.tsx b/src/app/(app)/integrationen/page.tsx index c768703..684f798 100644 --- a/src/app/(app)/integrationen/page.tsx +++ b/src/app/(app)/integrationen/page.tsx @@ -166,10 +166,9 @@ export default async function IntegrationenSeite() { Telegram-Chats Nur wer hier steht, darf mit dem Bot reden — und nur diese Chats bekommen - Meldungen. Alles andere wird verworfen, ohne zu antworten. Die Kennung - deines Chats verrät dir der Bot, wenn du ihm{' '} - /start schickst und danach hier nachsiehst; - steht sie noch nicht drin, findest du sie im Protokoll. + Meldungen. Alles andere wird verworfen, ohne zu antworten. Zum Verbinden + holst du dir hier einen Code und schickst ihn dem Bot; er gilt zehn Minuten + und genau einmal. diff --git a/src/components/kopfleiste.tsx b/src/components/kopfleiste.tsx index f314be0..e4f6ba0 100644 --- a/src/components/kopfleiste.tsx +++ b/src/components/kopfleiste.tsx @@ -50,7 +50,13 @@ export function Kopfleiste({ Navigation waagerecht, statt umzubrechen und den Namen der Anwendung in die zweite Zeile zu drängen. */} -
+ {/* + Breiter als die Inhaltsspalte (max-w-5xl): Mit dem elften Eintrag + passte die Leiste dort nicht mehr, und "Einstellungen" verschwand + stillschweigend am rechten Rand. Eine Leiste, die Punkte verschluckt, + ist schlimmer als eine, die nicht buendig mit dem Text steht. + */} +
Planer diff --git a/src/server/jobs.ts b/src/server/jobs.ts index 93196a5..7aaa372 100644 --- a/src/server/jobs.ts +++ b/src/server/jobs.ts @@ -111,7 +111,12 @@ export function jobsStarten(): void { const einst = umgebung() - if (einst.zammadAktiv) { + // Die Demo-Instanz redet mit niemandem. Sie ist mit erfundenen Daten + // gefuellt und steht nur fuer Bilder – ein Aufruf nach draussen waere + // bestenfalls sinnlos und schlimmstenfalls peinlich. + const nachDraussen = !einst.DEMO_MODUS + + if (einst.zammadAktiv && nachDraussen) { cron.schedule(ZAMMAD_PLAN, () => { void zammadAbgleichen(DIENST) .then((bericht) => { @@ -127,7 +132,7 @@ export function jobsStarten(): void { }) } - if (einst.telegramAktiv) { + if (einst.telegramAktiv && nachDraussen) { cron.schedule(TELEGRAM_PLAN, () => { void telegramAbholen(DIENST) .then((bericht) => { @@ -142,7 +147,7 @@ export function jobsStarten(): void { }) } - if (einst.spiegelSendenAktiv) { + if (einst.spiegelSendenAktiv && nachDraussen) { cron.schedule(SPIEGEL_PLAN, () => { void spiegelSenden().catch((fehler: unknown) => { console.error('Spiegel-Versand abgebrochen:', fehler)