Initial commit: Konzept v2 + Etappe 1 (Blueprints + Login + Profile)
Schwester-Projekt zu arduino.lehrstun.de fuer die 3D-Druck-AG am
Lessing-Gymnasium. Offene jahrelange Nachmittags-AG (kein Trimester),
8-10 Einzel-SuS mit optionalen 2er-Paarungen, 4 Bambu-Lab-Drucker
(3 geschlossen + 1 A1 mini).
Konzept v2 (Reality-Check-Iteration 2026-05-24):
- Onboarding-Pfad statt Pflicht-Lektionen (L1-L3 selbst-zertifiziert)
- Selbstlern-Loop als Kern: SuS-Projekte wachsen die interne Bibliothek
- Drill-Down-Lehrer-Dashboard (Wer ist hier / Wartet Review / Haengt fest)
- Cockpit progressiv: zeigt nur was zum Status passt
- Bambu-Cloud-API fuer Drucker-Live-Status (fragil + Fallback manuell)
- Three.js-Vorschau fuer Cover-aus-3D-Ansicht (Etappe 6)
- Vollstaendige Doku als Obsidian-Vault (24 Markdown-Dateien)
- Entscheidungen E-001 bis E-022 in docs/decisions.md
Etappe 1 lauffaehig (~1800 Zeilen Code):
- Blueprint-Struktur (V8): routes/oeffentlich+profil+admin+api,
services/auth+bambu+datei
- Komplettes Schema in database.py (14 Tabellen, idempotent)
- Login mit bcrypt + persistentem Lockout in DB (V7, verbessert ggue
Arduino-Kurs der In-Memory-Dict nutzt)
- Admin-Login + Profile-CRUD + PIN-Reset + PIN-Karten-Druckbogen
- Inline-Edit-Endpunkt mit Whitelist + Audit-Log
- Seeds: AG lessing-3d-ag + 4 Drucker + Default-Einstellungen
- Smoke-Test bestanden (Login, Profil-Anlage, Lockout-Logging)
Nicht im Repo (.gitignore): .env, *.db, venv/, .obsidian/workspace.json
2026-05-24 18:56:59 +02:00
|
|
|
"""Initial-Seeds fuer 3d.lehrstun.de.
|
|
|
|
|
|
|
|
|
|
Idempotent — laeuft bei jeder Ausfuehrung ohne Schaden.
|
|
|
|
|
|
|
|
|
|
Aktuell befuellt:
|
|
|
|
|
- ag_mitgliedschaft: 'lessing-3d-ag' (die eine, dauerhafte AG)
|
|
|
|
|
- drucker: 4 Bambu-Lab-Drucker (3 geschlossen + 1 A1 mini)
|
|
|
|
|
|
|
|
|
|
Spaeter folgen Seeds fuer:
|
|
|
|
|
- lektion: L1-L3 Onboarding (Etappe 3, mit Markus inhaltlich)
|
|
|
|
|
- einstellung: Default-Werte fuer Tag-Vorschlaege etc.
|
|
|
|
|
"""
|
|
|
|
|
from database import get_db, init_db
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def seed_ag():
|
|
|
|
|
"""Die eine dauerhafte AG."""
|
|
|
|
|
conn = get_db()
|
|
|
|
|
conn.execute(
|
|
|
|
|
"INSERT OR IGNORE INTO ag_mitgliedschaft (id, name, start_datum, status) "
|
|
|
|
|
"VALUES (?, ?, ?, ?)",
|
|
|
|
|
("lessing-3d-ag", "3D-Druck-AG Lessing-Gymnasium", "2026-05-24", "aktiv")
|
|
|
|
|
)
|
|
|
|
|
conn.commit()
|
|
|
|
|
conn.close()
|
|
|
|
|
print("[seed] AG 'lessing-3d-ag' angelegt (oder bereits da).")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def seed_drucker():
|
|
|
|
|
"""4 Bambu-Lab-Drucker mit Default-Namen.
|
|
|
|
|
|
|
|
|
|
Konkrete Serial-Numbers + Namen werden vom Admin per Inline-Edit gepflegt.
|
|
|
|
|
Hier nur Platzhalter, damit die Drucker-Verwaltung was zum Anzeigen hat.
|
|
|
|
|
"""
|
|
|
|
|
drucker = [
|
|
|
|
|
("P1S #1", "P1S", None, 1, "geschlossenes Gehäuse"),
|
|
|
|
|
("P1S #2", "P1S", None, 1, "geschlossenes Gehäuse"),
|
|
|
|
|
("X1C", "X1C", None, 1, "geschlossen + HEPA"),
|
|
|
|
|
("A1 mini", "A1 mini", None, 0, "offen — Hände weg vom Hotend!"),
|
|
|
|
|
]
|
|
|
|
|
conn = get_db()
|
|
|
|
|
for name, modell, serial, geschlossen, notiz in drucker:
|
|
|
|
|
conn.execute(
|
|
|
|
|
"INSERT OR IGNORE INTO drucker (name, modell, serial_nr, geschlossenes_gehaeuse, aktiv, notiz) "
|
|
|
|
|
"VALUES (?, ?, ?, ?, 1, ?)",
|
|
|
|
|
(name, modell, serial, geschlossen, notiz)
|
|
|
|
|
)
|
|
|
|
|
conn.commit()
|
|
|
|
|
conn.close()
|
|
|
|
|
print(f"[seed] {len(drucker)} Drucker angelegt (oder bereits da).")
|
|
|
|
|
|
|
|
|
|
|
2026-05-24 19:13:19 +02:00
|
|
|
def seed_lektionen():
|
|
|
|
|
"""3 Onboarding-Lektionen mit Platzhalter-Inhalt.
|
|
|
|
|
|
|
|
|
|
Endgueltige Inhalte werden gemeinsam mit Markus erarbeitet (siehe
|
|
|
|
|
docs/lektion-L1-drucker-kennenlernen.md etc.). Hier nur das Geruest,
|
|
|
|
|
damit der Onboarding-Pfad ueberhaupt was zum Anklicken hat.
|
|
|
|
|
"""
|
|
|
|
|
lektionen = [
|
L1: SuS-gerechte Zusammenfassung der P2S-Anatomie (in eigenen Worten)
Quelle als Inspiration: Bambu Wiki P2S-Einfuehrung (Deutsch).
Text ist eigene Formulierung fuer Klasse 8 — keine 1:1-Uebernahme,
deshalb urheberrechtlich unbedenklich.
Inhalt der L1.aufgabe_md (4 KB):
- Wie 3D-Druck grob funktioniert (Schicht fuer Schicht)
- X/Y/Z-Bewegung, A1-mini-Unterschied erwaehnt
- Druckkopf-Anatomie (Extruder, Hotend, Duese, Silikonsocke)
- Heizbett + PEI-Druckplatte mit Pflegehinweis
- Automatik im Hintergrund (Bett-Levelling, Duesen-Reinigung, Filament-Erkennung)
- Luftfilter + adaptives Luftstromsystem (gut fuer Klassenraum)
- Touchscreen + Kamera + Bambu Handy App
- Konkreter Lektions-Ablauf am Ende (Sicherheits-Briefing, App-Setup, Erstdruck)
extern_link von L1: jetzt direkt das Bambu-Wiki (Deutsch) statt der
englischen Academy — mit Herbs OK (Registrierung ist akzeptabel).
Migration migrations/2026-05-24_l1_inhalt_v2.py — idempotent ueber Marker
im Text. Bei neuer Installation: seed.py legt Minimal-Stub, Migration
fuellt drueber.
docs/lektion-L1-drucker-kennenlernen.md aktualisiert mit Hinweisen zu
Migrationen + neuem TODO "A1 mini braucht eigene Anleitung".
2026-05-24 19:34:19 +02:00
|
|
|
# L1-Inhalt wird durch migrations/2026-05-24_l1_inhalt_v2.py auf den
|
|
|
|
|
# endgueltigen Stand gebracht — hier nur Minimal-Stub, damit `seed.py`
|
|
|
|
|
# alleine schon was anzeigt. Bei voller Doku: erst seed.py, dann alle
|
|
|
|
|
# migrations/ ausfuehren.
|
2026-05-24 19:13:19 +02:00
|
|
|
(1, "Drucker-Kennenlernen + Sicherheit",
|
L1: SuS-gerechte Zusammenfassung der P2S-Anatomie (in eigenen Worten)
Quelle als Inspiration: Bambu Wiki P2S-Einfuehrung (Deutsch).
Text ist eigene Formulierung fuer Klasse 8 — keine 1:1-Uebernahme,
deshalb urheberrechtlich unbedenklich.
Inhalt der L1.aufgabe_md (4 KB):
- Wie 3D-Druck grob funktioniert (Schicht fuer Schicht)
- X/Y/Z-Bewegung, A1-mini-Unterschied erwaehnt
- Druckkopf-Anatomie (Extruder, Hotend, Duese, Silikonsocke)
- Heizbett + PEI-Druckplatte mit Pflegehinweis
- Automatik im Hintergrund (Bett-Levelling, Duesen-Reinigung, Filament-Erkennung)
- Luftfilter + adaptives Luftstromsystem (gut fuer Klassenraum)
- Touchscreen + Kamera + Bambu Handy App
- Konkreter Lektions-Ablauf am Ende (Sicherheits-Briefing, App-Setup, Erstdruck)
extern_link von L1: jetzt direkt das Bambu-Wiki (Deutsch) statt der
englischen Academy — mit Herbs OK (Registrierung ist akzeptabel).
Migration migrations/2026-05-24_l1_inhalt_v2.py — idempotent ueber Marker
im Text. Bei neuer Installation: seed.py legt Minimal-Stub, Migration
fuellt drueber.
docs/lektion-L1-drucker-kennenlernen.md aktualisiert mit Hinweisen zu
Migrationen + neuem TODO "A1 mini braucht eigene Anleitung".
2026-05-24 19:34:19 +02:00
|
|
|
"*Inhalt kommt mit Migration 2026-05-24_l1_inhalt_v2.py.*",
|
2026-05-24 19:13:19 +02:00
|
|
|
"Frag den Lehrer, wenn du irgendwas nicht verstehst — Sicherheit geht vor.",
|
L1: SuS-gerechte Zusammenfassung der P2S-Anatomie (in eigenen Worten)
Quelle als Inspiration: Bambu Wiki P2S-Einfuehrung (Deutsch).
Text ist eigene Formulierung fuer Klasse 8 — keine 1:1-Uebernahme,
deshalb urheberrechtlich unbedenklich.
Inhalt der L1.aufgabe_md (4 KB):
- Wie 3D-Druck grob funktioniert (Schicht fuer Schicht)
- X/Y/Z-Bewegung, A1-mini-Unterschied erwaehnt
- Druckkopf-Anatomie (Extruder, Hotend, Duese, Silikonsocke)
- Heizbett + PEI-Druckplatte mit Pflegehinweis
- Automatik im Hintergrund (Bett-Levelling, Duesen-Reinigung, Filament-Erkennung)
- Luftfilter + adaptives Luftstromsystem (gut fuer Klassenraum)
- Touchscreen + Kamera + Bambu Handy App
- Konkreter Lektions-Ablauf am Ende (Sicherheits-Briefing, App-Setup, Erstdruck)
extern_link von L1: jetzt direkt das Bambu-Wiki (Deutsch) statt der
englischen Academy — mit Herbs OK (Registrierung ist akzeptabel).
Migration migrations/2026-05-24_l1_inhalt_v2.py — idempotent ueber Marker
im Text. Bei neuer Installation: seed.py legt Minimal-Stub, Migration
fuellt drueber.
docs/lektion-L1-drucker-kennenlernen.md aktualisiert mit Hinweisen zu
Migrationen + neuem TODO "A1 mini braucht eigene Anleitung".
2026-05-24 19:34:19 +02:00
|
|
|
"https://wiki.bambulab.com/de/p2s/manual/p2s-intro"),
|
2026-05-24 19:41:36 +02:00
|
|
|
# L2/L3: Sprache angepasst per Migration 2026-05-24_lektion_sprache_3d_modell
|
|
|
|
|
# — 'Modell' ist mehrdeutig (Drucker- vs. 3D-Modell), durchgehend 3D-Modell verwendet.
|
|
|
|
|
(2, "3D-Modell aus dem Netz drucken",
|
|
|
|
|
"*Inhalt kommt mit Migration 2026-05-24_lektion_sprache_3d_modell.*",
|
|
|
|
|
"Lizenz-Symbole sind nicht wichtig fuer uns — wir drucken nur fuer uns selbst, geben nichts weiter.",
|
2026-05-24 19:13:19 +02:00
|
|
|
"https://www.printables.com/"),
|
2026-05-24 19:41:36 +02:00
|
|
|
(3, "Customizer — parametrisches 3D-Modell anpassen",
|
|
|
|
|
"*Inhalt kommt mit Migration 2026-05-24_lektion_sprache_3d_modell.*",
|
|
|
|
|
"Tipp: Das 3D-Modell 'Parametric Name Keychain Creator' auf MakerWorld ist ein guter Einstieg.",
|
2026-05-24 19:13:19 +02:00
|
|
|
"https://makerworld.com/en/models/1320280"),
|
|
|
|
|
]
|
|
|
|
|
conn = get_db()
|
|
|
|
|
for nummer, titel, aufgabe_md, tipp_md, extern_link in lektionen:
|
|
|
|
|
conn.execute(
|
|
|
|
|
"INSERT OR IGNORE INTO lektion (nummer, titel, onboarding, aufgabe_md, tipp_md, extern_link, schwierigkeit, aktiv) "
|
|
|
|
|
"VALUES (?, ?, 1, ?, ?, ?, 'leicht', 1)",
|
|
|
|
|
(nummer, titel, aufgabe_md, tipp_md, extern_link)
|
|
|
|
|
)
|
|
|
|
|
conn.commit()
|
|
|
|
|
conn.close()
|
|
|
|
|
print(f"[seed] {len(lektionen)} Onboarding-Lektionen angelegt.")
|
|
|
|
|
|
|
|
|
|
|
Initial commit: Konzept v2 + Etappe 1 (Blueprints + Login + Profile)
Schwester-Projekt zu arduino.lehrstun.de fuer die 3D-Druck-AG am
Lessing-Gymnasium. Offene jahrelange Nachmittags-AG (kein Trimester),
8-10 Einzel-SuS mit optionalen 2er-Paarungen, 4 Bambu-Lab-Drucker
(3 geschlossen + 1 A1 mini).
Konzept v2 (Reality-Check-Iteration 2026-05-24):
- Onboarding-Pfad statt Pflicht-Lektionen (L1-L3 selbst-zertifiziert)
- Selbstlern-Loop als Kern: SuS-Projekte wachsen die interne Bibliothek
- Drill-Down-Lehrer-Dashboard (Wer ist hier / Wartet Review / Haengt fest)
- Cockpit progressiv: zeigt nur was zum Status passt
- Bambu-Cloud-API fuer Drucker-Live-Status (fragil + Fallback manuell)
- Three.js-Vorschau fuer Cover-aus-3D-Ansicht (Etappe 6)
- Vollstaendige Doku als Obsidian-Vault (24 Markdown-Dateien)
- Entscheidungen E-001 bis E-022 in docs/decisions.md
Etappe 1 lauffaehig (~1800 Zeilen Code):
- Blueprint-Struktur (V8): routes/oeffentlich+profil+admin+api,
services/auth+bambu+datei
- Komplettes Schema in database.py (14 Tabellen, idempotent)
- Login mit bcrypt + persistentem Lockout in DB (V7, verbessert ggue
Arduino-Kurs der In-Memory-Dict nutzt)
- Admin-Login + Profile-CRUD + PIN-Reset + PIN-Karten-Druckbogen
- Inline-Edit-Endpunkt mit Whitelist + Audit-Log
- Seeds: AG lessing-3d-ag + 4 Drucker + Default-Einstellungen
- Smoke-Test bestanden (Login, Profil-Anlage, Lockout-Logging)
Nicht im Repo (.gitignore): .env, *.db, venv/, .obsidian/workspace.json
2026-05-24 18:56:59 +02:00
|
|
|
def seed_einstellungen():
|
|
|
|
|
"""Default-Einstellungen, die spaeter inline editiert werden koennen."""
|
|
|
|
|
werte = [
|
|
|
|
|
("tag_vorschlaege",
|
|
|
|
|
"schluesselanhaenger,organizer,werkzeug,spiel,dekoration,ersatzteil,geschenk,figur",
|
|
|
|
|
"text",
|
|
|
|
|
"Komma-getrennte Liste der vorgeschlagenen Tags im Projekt-Katalog"),
|
|
|
|
|
("default_lockout_dauer_min", "15", "integer",
|
|
|
|
|
"Minuten, die ein Profil bei zu vielen Fehlversuchen gesperrt wird"),
|
|
|
|
|
("feedback_widget_aktiv", "0", "integer",
|
|
|
|
|
"Soft-Schalter fuer das Alph-PummelHummel-Widget (kommt in Etappe 9)"),
|
|
|
|
|
]
|
|
|
|
|
conn = get_db()
|
|
|
|
|
for schluessel, wert, typ, beschreibung in werte:
|
|
|
|
|
conn.execute(
|
|
|
|
|
"INSERT OR IGNORE INTO einstellung (schluessel, wert, typ, beschreibung) "
|
|
|
|
|
"VALUES (?, ?, ?, ?)",
|
|
|
|
|
(schluessel, wert, typ, beschreibung)
|
|
|
|
|
)
|
|
|
|
|
conn.commit()
|
|
|
|
|
conn.close()
|
|
|
|
|
print(f"[seed] {len(werte)} Default-Einstellungen angelegt.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
init_db()
|
|
|
|
|
seed_ag()
|
|
|
|
|
seed_drucker()
|
2026-05-24 19:13:19 +02:00
|
|
|
seed_lektionen()
|
Initial commit: Konzept v2 + Etappe 1 (Blueprints + Login + Profile)
Schwester-Projekt zu arduino.lehrstun.de fuer die 3D-Druck-AG am
Lessing-Gymnasium. Offene jahrelange Nachmittags-AG (kein Trimester),
8-10 Einzel-SuS mit optionalen 2er-Paarungen, 4 Bambu-Lab-Drucker
(3 geschlossen + 1 A1 mini).
Konzept v2 (Reality-Check-Iteration 2026-05-24):
- Onboarding-Pfad statt Pflicht-Lektionen (L1-L3 selbst-zertifiziert)
- Selbstlern-Loop als Kern: SuS-Projekte wachsen die interne Bibliothek
- Drill-Down-Lehrer-Dashboard (Wer ist hier / Wartet Review / Haengt fest)
- Cockpit progressiv: zeigt nur was zum Status passt
- Bambu-Cloud-API fuer Drucker-Live-Status (fragil + Fallback manuell)
- Three.js-Vorschau fuer Cover-aus-3D-Ansicht (Etappe 6)
- Vollstaendige Doku als Obsidian-Vault (24 Markdown-Dateien)
- Entscheidungen E-001 bis E-022 in docs/decisions.md
Etappe 1 lauffaehig (~1800 Zeilen Code):
- Blueprint-Struktur (V8): routes/oeffentlich+profil+admin+api,
services/auth+bambu+datei
- Komplettes Schema in database.py (14 Tabellen, idempotent)
- Login mit bcrypt + persistentem Lockout in DB (V7, verbessert ggue
Arduino-Kurs der In-Memory-Dict nutzt)
- Admin-Login + Profile-CRUD + PIN-Reset + PIN-Karten-Druckbogen
- Inline-Edit-Endpunkt mit Whitelist + Audit-Log
- Seeds: AG lessing-3d-ag + 4 Drucker + Default-Einstellungen
- Smoke-Test bestanden (Login, Profil-Anlage, Lockout-Logging)
Nicht im Repo (.gitignore): .env, *.db, venv/, .obsidian/workspace.json
2026-05-24 18:56:59 +02:00
|
|
|
seed_einstellungen()
|
|
|
|
|
print("[seed] Fertig.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|