Skip to content

Repository files navigation

Schul-App — Roadmap

Eine webbasierte Schul-App mit Schüler- und Lehrer-Login, Vertretungsplan, Kalender, Dateiverwaltung, Chat und Hausaufgaben.

Detaillierte Dokumentation: docs/


Phasen-Plan

Phase 1 — Auth & Fundament

Ziel: Lauffähige Infrastruktur, Login funktioniert end-to-end.

Backend:

  1. Go-Modul anlegen, chi, golang-jwt, bcrypt, sqlc, golang-migrate hinzufügen
  2. openapi.yaml mit Auth-Endpunkten beschreiben, make generate ausführen
  3. Migrationen schreiben, make migrate ausführen
  4. bcrypt-Passwort-Hashing + JWT-Middleware in internal/middleware/auth.go
  5. POST /auth/login, POST /auth/refresh, GET /auth/me als Handler implementieren
  6. Rate Limiting auf Login-Endpunkt (golang.org/x/time/rate)

Frontend:

  1. Generierten TypeScript-Client aus openapi.yaml einbinden (make generate)
  2. authStore mit Zustand: user, accessToken, login(), logout()
  3. Access Token nur im Memory, Refresh Token als HttpOnly-Cookie
  4. Axios-Interceptor für automatischen Token-Refresh bei 401
  5. LoginPage.tsx mit Fehlerbehandlung
  6. ProtectedRoute + RoleRoute (student / teacher / admin)
  7. AppLayout + rollenbasierte Sidebar

Sicherheit:

  • Passwörter: bcrypt mit Cost 12
  • Access Token: 15 Minuten Laufzeit, nur im Memory
  • Refresh Token: 7 Tage, nur als HttpOnly-Cookie
  • Rate Limiting auf /auth/login

Phase 2 — Benutzer & Klassen

Ziel: Admin kann Benutzer und Klassen verwalten.

  1. Endpunkte in openapi.yaml ergänzen, make generate
  2. CRUD-Handler für Benutzer (Middleware: RequireRole("admin"))
  3. CRUD-Handler für Klassen + Mitglieder zuweisen
  4. go run seed/main.go für Testdaten
  5. Admin-Seiten: Benutzertabelle mit Suche, Klassenverwaltung mit Zuweisung

Phase 3 — Vertretungsplan

Ziel: Lehrer pflegen Vertretungen, Schüler sehen sie tagesaktuell.

  1. Endpunkte + Typen in openapi.yaml, make generate
  2. Go-Handler mit automatischer Filterung nach Klasse des eingeloggten Schülers
  3. Tagesansicht mit Farbkodierung: Ausfall = rot, Vertretung = gelb, Raumänderung = blau
  4. Auto-Refresh alle 5 Minuten (React Query refetchInterval)
  5. Lehrer-Formular zum Erstellen/Bearbeiten

Phase 4 — Kalender

Ziel: Schulweite und klassenspezifische Termine.

  1. Events-Endpunkte mit Datumsbereichs-Filterung
  2. Sichtbarkeit: schulweit (class_id = NULL) vs. klassenspezifisch
  3. Monats- und Wochenansicht mit react-big-calendar
  4. Farbkodierung nach Typ: Ferien, Klassenarbeit, Veranstaltung
  5. Termin-Erstellen-Modal für Lehrer

Phase 5 — Dateiverwaltung

Ziel: Lehrer laden Materialien hoch, Schüler können herunterladen.

  1. Go multipart.Reader für Upload (max 50 MB, MIME-Type-Prüfung mit http.DetectContentType)
  2. Download-Handler prüft JWT — kein direkter Dateizugriff ohne Auth
  3. Rekursive SQL-Query (CTE) für Ordner-Hierarchie + Breadcrumb
  4. Explorer-Layout, Drag-and-Drop mit Fortschrittsanzeige, Dateivorschau

Phase 6 — Hausaufgaben

Ziel: Lehrer erstellen Aufgaben, Schüler sehen Fälligkeiten und geben ab.

  1. Beim Erstellen automatisch submissions für alle Klassenmitglieder anlegen (Status: open)
  2. Status-Flow: opensubmittedgraded
  3. Schüler-Ansicht: Ampel-Status, gruppiert nach Fälligkeit, Filter: Alle / Offen / Diese Woche
  4. Lehrer-Ansicht: Abgabeliste aller Schüler, Note eintragen, Rich-Text-Beschreibung

Phase 7 — Chat

Ziel: Echtzeit-Kommunikation zwischen Lehrern und Schülern.

  1. gorilla/websocket Hub in internal/ws/hub.go — ein goroutine pro Verbindung
  2. JWT-Validierung beim WebSocket-Upgrade (Query-Parameter ?token=...)
  3. Nachrichten-Events: send_message → Hub broadcastet new_message, typing, mark_read
  4. REST für Kanal-Erstellung + historische Nachrichten (Cursor-Pagination via sqlc)
  5. Zweispaltiges Layout: Kanalliste | Nachrichtenthread
  6. Virtuelles Scrolling, ungelesene Badges, Tipp-Indikator

Phase 8 — Dashboard, Benachrichtigungen & Sicherheit

Ziel: Vollständig nutzbare, robuste App.

  1. Rollenspezifisches Dashboard: Schüler sehen Vertretungen + Hausaufgaben + Termine, Lehrer sehen Klassen + Abgaben + Nachrichten
  2. Benachrichtigungs-Tabelle + WebSocket Push + NotificationBell
  3. Globale Error-Boundary, Toast-Notifications, Skeleton-Loader
  4. Alle Inputs serverseitig in Go validieren (generierte Typen aus OpenAPI + eigene Checks)
  5. CSRF-Schutz (sameSite: 'strict'), Dateinamen sanitisieren (filepath.Base)
  6. Mobile Responsiveness: Sidebar als Drawer auf kleinen Screens

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages