Liegestuetze: Zaehler aus Kanalpunkten, Overlay und Korrektur von Hand

Neue Aktion `liegestuetze` fuer Belohnungen: jede Einloesung zaehlt um
`anzahl` hoch (Vorgabe 5). Der Stand liegt in der Datenbank und
uebersteht einen Neustart. Browser-Source /liegestuetze zeigt ihn, die
Uebersichtsseite hat Knoepfe zum Herunterzaehlen und Setzen.

Nebenbei: POST /tts landete bei der Overlay-Seite statt bei der
Freigabe. Seiten werden jetzt nur noch bei GET ausgeliefert.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZeasyAlexandClaude Opus 5.5 committed 2026-10-04 00:15:50 +02:00
1 parent 5622499877
commit eb9eab949e
11 files changed
+469 -9

No files matched your search

+36
View File
@@ -0,0 +1,36 @@
// Offene Liegestuetze aus Kanalpunkten.
//
// Eine Einloesung zaehlt hoch, Abdu zaehlt auf der Uebersichtsseite wieder
// herunter, wenn er sie gemacht hat - oder korrigiert, wenn etwas nicht
// stimmt. Der Stand liegt in der Datenbank: was die Zuschauer bezahlt haben,
// darf ein Neustart nicht loeschen.
import type { Db } from '#db/index.ts';
/** Mehr glaubt niemand, und ein Tippfehler mit sechs Nullen soll nicht im Bild stehen. */
export const HOECHSTENS = 99_999;
export type Liegestuetze = {
stand: () => number;
/** Zaehlt um `n` hoch oder (negativ) herunter. Nie unter 0. Gibt den neuen Stand zurueck. */
aendern: (n: number) => number;
/** Setzt den Stand fest. Gibt den neuen Stand zurueck. */
setzen: (n: number) => number;
};
export function createLiegestuetze(db: Db, name = 'liegestuetze'): Liegestuetze {
const lesen = db.prepare('SELECT wert FROM zaehler WHERE name = ?');
const schreiben = db.prepare(`
INSERT INTO zaehler (name, wert, geaendert) VALUES (?, ?, ?)
ON CONFLICT(name) DO UPDATE SET wert = excluded.wert, geaendert = excluded.geaendert
`);
const stand = (): number => (lesen.get(name) as { wert: number } | undefined)?.wert ?? 0;
const setzen = (n: number): number => {
const wert = Math.min(HOECHSTENS, Math.max(0, Math.trunc(n)));
schreiben.run(name, wert, new Date().toISOString());
return wert;
};
return { stand, setzen, aendern: (n) => setzen(stand() + n) };
}