Files
lernbar/src/lib/repos/module.ts
T
Florian WildeandClaude Opus 5.5 44e6c8bb79 Module abschaltbar machen
Merkkarten, Praxisaufgaben, Checklisten, Berichtsheft, Lernzielkontrollen
und Feedbackgespraech lassen sich unter Verwaltung -> Module fuer die ganze
Lern-Bar ab- und einschalten. Wochenplan, Handouts, Glossar, Auswertung und
Verwaltung bleiben immer an.

Gesperrt wird an drei Stellen, nicht im Layout (Next rendert Layouts beim
Seitenwechsel darunter nicht neu): Seiten mit erfordereModul, Routen fuer
PDF, Anhaenge und Lernstand mit modulAn, alle 37 Serveraktionen der Module
mit pruefeModul. Die Anmeldepruefung kommt jeweils zuerst, damit ein
Unangemeldeter nicht am 404 abliest, was abgeschaltet ist.

Ein abgeschaltetes Modul traegt nirgends bei: Wochenplan, Fortschritt,
Was-wartet, Mein Stand, Ergebnisverlauf, Rahmenplanabdeckung, Vorschlaege
fuers Berichtsheft, Karten im Handout, Kurzbefehle im Manifest. Die
Lernstand-Schnittstelle antwortet mit 410, das Geraet verwirft daraufhin
seine Offline-Warteschlange. Abschalten loescht nichts.

Gespeichert in modul_einstellung (Migration 0010); fehlt die Zeile, ist das
Modul an, eine bestehende Datenbank verhaelt sich also wie vorher.

12 Tests fuer die Regeln, Abschnitt A8 im Abnahmelauf, Anleitung Kapitel 9
mit Bildschirmfoto, README, E43.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 16:58:32 +02:00

29 lines
1.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { datenbank, schema } from '../db';
import { jetzt } from '../zeit';
import { standAus, type ModulId, type ModulStand } from '../module/module';
/** Sämtlicher Zugriff auf die Tabelle `modul_einstellung` läuft über dieses Modul. */
/** Der aktuelle Stand aller Module. Ohne gespeicherte Zeile ist ein Modul an. */
export function modulStand(): ModulStand {
const zeilen = datenbank()
.select({ modul: schema.modulEinstellung.modul, aktiv: schema.modulEinstellung.aktiv })
.from(schema.modulEinstellung)
.all();
return standAus(zeilen);
}
/** Wer wann zuletzt umgeschaltet hat – für die Anzeige in der Verwaltung. */
export function modulAenderungen() {
return datenbank().select().from(schema.modulEinstellung).all();
}
export function modulSetzen(modul: ModulId, aktiv: boolean, benutzerId: string): void {
const werte = { aktiv: aktiv ? 1 : 0, geaendertVon: benutzerId, geaendertAm: jetzt() };
datenbank()
.insert(schema.modulEinstellung)
.values({ modul, ...werte })
.onConflictDoUpdate({ target: schema.modulEinstellung.modul, set: werte })
.run();
}