"""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).") 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-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. (1, "Drucker-Kennenlernen + Sicherheit", "*Inhalt kommt mit Migration 2026-05-24_l1_inhalt_v2.py.*", "Frag den Lehrer, wenn du irgendwas nicht verstehst — Sicherheit geht vor.", "https://wiki.bambulab.com/de/p2s/manual/p2s-intro"), (2, "Fremdes Modell waehlen + drucken", "**Was du in dieser Lektion lernst:**\n\n" "- Auf Printables (oder MakerWorld) ein passendes Modell finden.\n" "- Das Modell in Bambu Studio importieren und slicen.\n" "- Druckzeit + Material abschaetzen, Slot reservieren, drucken.\n\n" "**Aufgabe:** Such dir auf Printables ein Modell, das unter 1 h " "Druckzeit liegt. Such was, das du wirklich haben willst.\n\n" "*Inhalt wird mit Markus weiter ausgearbeitet.*", "Lizenz-Symbole sind nicht wichtig fuer uns — wir drucken nur fuer uns selbst, " "geben nichts weiter.", "https://www.printables.com/"), (3, "Customizer / parametrisches Modell", "**Was du in dieser Lektion lernst:**\n\n" "- Was 'parametrisch' bedeutet (du veraenderst Werte, das Modell passt sich an).\n" "- Mit dem MakerWorld-Customizer ein Modell mit deinem eigenen Namen drucken.\n\n" "**Aufgabe:** Mach einen Schluesselanhaenger mit deinem Vornamen drauf — " "veraendere Schriftart, Groesse, Loch-Position.\n\n" "*Inhalt wird mit Markus weiter ausgearbeitet.*", "Tipp: Das Modell 'Parametric Name Keychain Creator' auf MakerWorld ist ein guter Einstieg.", "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.") 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() seed_lektionen() seed_einstellungen() print("[seed] Fertig.") if __name__ == "__main__": main()