Files
Hans Puettmann 66c52cc8b1 PummelHummel/Alph in 3D-Druck-AG integriert
Quelle: D:/Claude-Projekte/PummelHummel/feedback_modul/ (Standard-Pattern,
auch in arduino.lehrstun.de + meta.lehrstun.de erprobt). 1:1 nach
3d.lehrstun.de/feedback_modul/ kopiert.

app.py erweitert:
- init_feedback_modul-Aufruf mit unseren Adaptern
- _alph_user_kontext: Lehrer = admin, SuS = profil mit Vorname+Tier,
  Anonym = kein Widget
- _alph_widget_aktiv: liest einstellung.feedback_widget_aktiv
- _alph_admin_unauthorized: Redirect zu admin.admin_login

Hart-Aus via ENV ALPH_DEAKTIVIERT=1 weiterhin moeglich.
Soft-Aus via einstellung.feedback_widget_aktiv='0' (per Admin-Inline-Edit).

DB:
- feedback-Tabelle via feedback_modul.schema.DDL angelegt (idempotent)
- einstellung.feedback_widget_aktiv auf '1' gesetzt (Alpha-Test-Modus)

Test:
- Eingeloggter SuS sieht das Alph-Widget auf /lektion/1
- Anonym (kein Login) sieht es nicht (user_kontext gibt None)
- Admin sieht es mit Rolle 'admin'

Naechster Schritt: Deploy auf Hetzner (3d.lehrstun.de), Markus loggt
sich als Test-Schueler ein und gibt Feedback zu den 14 Lektionen.
2026-05-25 15:29:39 +02:00

38 lines
1.4 KiB
Python

"""Schema-DDL fuer das Alph-Feedback-Modul.
Idempotent — kann mehrfach ausgefuehrt werden.
"""
DDL = """
CREATE TABLE IF NOT EXISTS feedback (
id INTEGER PRIMARY KEY AUTOINCREMENT,
app_name TEXT NOT NULL,
kategorie TEXT NOT NULL,
text TEXT NOT NULL,
url_pfad TEXT NOT NULL,
seitentitel TEXT,
user_kontext TEXT, -- JSON: tier, kasten, kurs, gruppe_id, rolle
technik_kontext TEXT, -- JSON: viewport, ua, sprache, referer
element_selector TEXT,
element_text TEXT,
status TEXT NOT NULL DEFAULT 'neu', -- neu|triagiert|in_arbeit|erledigt|wontfix|spam
cluster_hash TEXT,
bearbeitet_von TEXT,
bearbeitet_notiz TEXT,
erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP,
aktualisiert_am DATETIME
);
CREATE INDEX IF NOT EXISTS feedback_status_idx ON feedback(status);
CREATE INDEX IF NOT EXISTS feedback_app_idx ON feedback(app_name);
CREATE INDEX IF NOT EXISTS feedback_cluster_idx ON feedback(cluster_hash);
"""
KATEGORIEN = [
("code", "Codefehler", "Sketch tut nicht, Compiler-Error"),
("link", "Link kaputt", "Knopf oder Link fuehrt ins Leere"),
("verstehen", "Versteh ich nicht", "Erklaerung unklar oder zu schwer"),
("fehlt", "Etwas fehlt", "Information, Bauteil, Schritt ist nicht da"),
("sonstiges", "Sonstiges", "Anderes Feedback / Idee / Lob"),
]