4.3 KiB
4.3 KiB
Handbuch – FL-Akademie LMS
Technische und organisatorische Dokumentation des implementierten Stands. Ergänzt PLAN.md (Vision & Roadmap).
1. Rollen (NextAuth + Prisma)
Rolle (Role) |
Zweck |
|---|---|
LEARNER |
Standard-Lernende |
INSTRUCTOR |
vorbereitet für spätere Dozenten-Features |
ADMIN |
voller Zugriff auf /admin |
Die Rolle liegt im JWT und wird über middleware.ts für /admin geprüft. /portal ist für alle angemeldeten Nutzer.
2. Öffentliche Website
- Startseite
/: Inhalte (Hero, CTAs, Vorteils-Kacheln) kommen aus der TabelleLandingPage(id = "default", Feldcontentals JSON). Fallback-Logik inlib/landing.ts, wenn keine oder ungültige Daten vorliegen. - Kurse: Veröffentlichte Kurse (
published = true), Einschreibung über API nur bei Preis 0 (kostenpflichtige Kurse: Hinweis in UI, Zahlung noch nicht angebunden).
3. Mitgliederbereich (/portal)
- Übersicht: Eingeschriebene Kurse, Fortschrittsbalken (abgeschlossene vs. gesamte veröffentlichte Lektionen), Links zum Lernen, zum Kurrikulum, zum Zertifikat (falls vorhanden).
- Kurs wiederholen: Link startet wieder bei der ersten Lektion; optional „Fortschritt zurücksetzen“ (löscht
LessonProgressund ggf.Certificatefür diesen Kurs). - Konto
/portal/account: Passwort ändern (POST /api/portal/password– aktuelles Passwort prüfen, neues hashen mit bcrypt). - Zertifikate
/portal/certificates: Liste ausgestellter Urkunden mit Link zur öffentlichen Ansicht.
4. Administration (/admin)
Nur mit Rolle ADMIN erreichbar (sonst Redirect nach /portal).
| Route | Funktion |
|---|---|
/admin |
Übersicht mit Verweisen |
/admin/courses |
Alle Kurse (inkl. Entwürfe), Link „Neuer Kurs“ |
/admin/courses/new |
Neuanlage: Titel, Slug, Beschreibung, Autor-Name, Preis (EUR), Abo-Intervall, Veröffentlicht |
/admin/courses/[id]/edit |
Stammdaten bearbeiten; Module und Lektionen hinzufügen (Lektion: optionaler Slug, HTML-Inhalt) |
/admin/users |
Nutzerliste (ohne Passwort): E-Mail, Name, Rolle, Anzahl Einschreibungen & Zertifikate |
/admin/landing |
Startseiten-Texte und bis zu 6 Vorteils-Kacheln; Speichern wirkt sofort auf / |
5. Zertifikate (Certificate of completion)
- Ausstellung: Sobald ein Nutzer alle veröffentlichten Lektionen eines Kurses als abgeschlossen markiert hat, legt
lib/certificates.ts(syncCertificateForCourse) einenCertificate-Datensatz mit eindeutigemcodean (Format z. B.FA-…). - Widerruf: Entfernen einzelner Lektions-Abschlüsse oder „Fortschritt zurücksetzen“ löscht das Zertifikat wieder, sobald der Kurs nicht mehr vollständig ist.
- Öffentliche Seite:
/zertifikat/[code]– Name, Kurstitel, Datum, Verifikationscode; Drucklayout blendet Kopf-/Fußzeile aus (@media printinapp/globals.css).
Auslöser nach Abschluss: POST /api/progress ruft syncCertificateForCourse auf.
6. Datenmodell (Prisma)
Wesentliche Modelle:
User,Course,CourseModule,Lesson,Enrollment,LessonProgressCategory,CourseCategory(Seed / spätere Filter)LandingPage– eine Zeiledefaultfür Startseiten-JSONCertificate–@@unique([userId, courseId]),codeglobal eindeutig
Migrationen unter prisma/migrations/.
7. Docker Compose
| Service | Beschreibung |
|---|---|
db |
postgres:16-alpine, Volume postgres_data |
web |
Build aus Dockerfile, Entrypoint scripts/docker-entrypoint.sh |
Umgebungsvariablen im Compose u. a. NEXT_TELEMETRY_DISABLED=1.
Befehle:
docker compose up --build -d # im Hintergrund
docker compose logs -f web # Logs
docker compose down # stoppen
8. Sicherheitshinweise (Produktion)
NEXTAUTH_SECRETundNEXTAUTH_URLkorrekt setzen.- Credentials-Login ist für Dev/MVP gedacht – für Produktion OAuth oder stärkere Passwortrichtlinien erwägen.
- Admin-Oberfläche nicht ohne Absicherung (TLS, Netzwerk) exponieren.
9. Git-Remote
Standard-Remote nach Klon/Push:
https://git.loepperts.com/loepperts/FL-Akademie.git
Branch: main (empfohlen).