Eine webbasierte Schul-App mit Schüler- und Lehrer-Login, Vertretungsplan, Kalender, Dateiverwaltung, Chat und Hausaufgaben.
Detaillierte Dokumentation: docs/
Ziel: Lauffähige Infrastruktur, Login funktioniert end-to-end.
Backend:
- Go-Modul anlegen,
chi,golang-jwt,bcrypt,sqlc,golang-migratehinzufügen openapi.yamlmit Auth-Endpunkten beschreiben,make generateausführen- Migrationen schreiben,
make migrateausführen bcrypt-Passwort-Hashing + JWT-Middleware ininternal/middleware/auth.goPOST /auth/login,POST /auth/refresh,GET /auth/meals Handler implementieren- Rate Limiting auf Login-Endpunkt (
golang.org/x/time/rate)
Frontend:
- Generierten TypeScript-Client aus
openapi.yamleinbinden (make generate) authStoremit Zustand:user,accessToken,login(),logout()- Access Token nur im Memory, Refresh Token als HttpOnly-Cookie
- Axios-Interceptor für automatischen Token-Refresh bei 401
LoginPage.tsxmit FehlerbehandlungProtectedRoute+RoleRoute(student / teacher / admin)AppLayout+ rollenbasierteSidebar
Sicherheit:
- Passwörter:
bcryptmit Cost 12 - Access Token: 15 Minuten Laufzeit, nur im Memory
- Refresh Token: 7 Tage, nur als HttpOnly-Cookie
- Rate Limiting auf
/auth/login
Ziel: Admin kann Benutzer und Klassen verwalten.
- Endpunkte in
openapi.yamlergänzen,make generate - CRUD-Handler für Benutzer (Middleware:
RequireRole("admin")) - CRUD-Handler für Klassen + Mitglieder zuweisen
go run seed/main.gofür Testdaten- Admin-Seiten: Benutzertabelle mit Suche, Klassenverwaltung mit Zuweisung
Ziel: Lehrer pflegen Vertretungen, Schüler sehen sie tagesaktuell.
- Endpunkte + Typen in
openapi.yaml,make generate - Go-Handler mit automatischer Filterung nach Klasse des eingeloggten Schülers
- Tagesansicht mit Farbkodierung: Ausfall = rot, Vertretung = gelb, Raumänderung = blau
- Auto-Refresh alle 5 Minuten (React Query
refetchInterval) - Lehrer-Formular zum Erstellen/Bearbeiten
Ziel: Schulweite und klassenspezifische Termine.
- Events-Endpunkte mit Datumsbereichs-Filterung
- Sichtbarkeit: schulweit (class_id = NULL) vs. klassenspezifisch
- Monats- und Wochenansicht mit
react-big-calendar - Farbkodierung nach Typ: Ferien, Klassenarbeit, Veranstaltung
- Termin-Erstellen-Modal für Lehrer
Ziel: Lehrer laden Materialien hoch, Schüler können herunterladen.
- Go
multipart.Readerfür Upload (max 50 MB, MIME-Type-Prüfung mithttp.DetectContentType) - Download-Handler prüft JWT — kein direkter Dateizugriff ohne Auth
- Rekursive SQL-Query (CTE) für Ordner-Hierarchie + Breadcrumb
- Explorer-Layout, Drag-and-Drop mit Fortschrittsanzeige, Dateivorschau
Ziel: Lehrer erstellen Aufgaben, Schüler sehen Fälligkeiten und geben ab.
- Beim Erstellen automatisch
submissionsfür alle Klassenmitglieder anlegen (Status:open) - Status-Flow:
open→submitted→graded - Schüler-Ansicht: Ampel-Status, gruppiert nach Fälligkeit, Filter: Alle / Offen / Diese Woche
- Lehrer-Ansicht: Abgabeliste aller Schüler, Note eintragen, Rich-Text-Beschreibung
Ziel: Echtzeit-Kommunikation zwischen Lehrern und Schülern.
gorilla/websocketHub ininternal/ws/hub.go— ein goroutine pro Verbindung- JWT-Validierung beim WebSocket-Upgrade (Query-Parameter
?token=...) - Nachrichten-Events:
send_message→ Hub broadcastetnew_message,typing,mark_read - REST für Kanal-Erstellung + historische Nachrichten (Cursor-Pagination via sqlc)
- Zweispaltiges Layout: Kanalliste | Nachrichtenthread
- Virtuelles Scrolling, ungelesene Badges, Tipp-Indikator
Ziel: Vollständig nutzbare, robuste App.
- Rollenspezifisches Dashboard: Schüler sehen Vertretungen + Hausaufgaben + Termine, Lehrer sehen Klassen + Abgaben + Nachrichten
- Benachrichtigungs-Tabelle + WebSocket Push +
NotificationBell - Globale Error-Boundary, Toast-Notifications, Skeleton-Loader
- Alle Inputs serverseitig in Go validieren (generierte Typen aus OpenAPI + eigene Checks)
- CSRF-Schutz (
sameSite: 'strict'), Dateinamen sanitisieren (filepath.Base) - Mobile Responsiveness: Sidebar als Drawer auf kleinen Screens