"""Oeffentliche Routen (kein Login noetig). Etappe 1: nur Startseite + Error-Handler portiert. Etappe 3: Lektionen, Software, Projekt-Katalog, Troubleshooting. Etappe 5: Drucker-Live-View. """ from flask import Blueprint, render_template, abort bp = Blueprint("oeffentlich", __name__) @bp.route("/") def index(): return render_template("index.html") # Stubs fuer spaetere Etappen — geben 501 zurueck, damit Navigation nicht bricht. @bp.route("/lektionen") def lektionen(): """Lektions-Uebersicht — Etappe 2 minimal, Etappe 3 voll mit Status-Badges.""" from database import get_db conn = get_db() lektionen = conn.execute( "SELECT nummer, titel, onboarding, schwierigkeit FROM lektion " "WHERE aktiv = 1 ORDER BY nummer" ).fetchall() conn.close() return render_template("lektionen.html", lektionen=lektionen) @bp.route("/lektion/") def lektion_detail(nummer): """Lektion einzeln — Etappe 2 minimal, Etappe 3 mit Status-Buttons + Inline-Edit.""" from database import get_db conn = get_db() lektion = conn.execute( "SELECT nummer, titel, onboarding, aufgabe_md, tipp_md, extern_link, schwierigkeit " "FROM lektion WHERE nummer = ? AND aktiv = 1", (nummer,) ).fetchone() conn.close() if not lektion: abort(404) return render_template("lektion_detail.html", lektion=lektion) @bp.route("/software") def software(): abort(501) @bp.route("/software/") def software_detail(slug): abort(501) @bp.route("/projekte") def projekte(): abort(501) @bp.route("/projekte/") def projekt_detail(projekt_id): abort(501) @bp.route("/troubleshooting") def troubleshooting(): abort(501) @bp.route("/drucker") def drucker(): abort(501)