8.1 KiB
Abgabe-Dokumentation
Benutzerverwaltung
-
Registrierung von Nutzern möglich? Wo?
- Ja, die Registrierung ist möglich.
- Frontend:
Frontend/components/auth/register-form.tsx(Das Formular). - Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/controller/AuthController.java(Endpoint/api/auth/register).
-
Pflichtfelder korrekt umgesetzt? (Name, Email, Passwort, Rolle) Wo?
- Ja, die Pflichtfelder werden sowohl im Frontend als auch im Backend geprüft.
- Frontend: Im
RegisterFormsind dieInput-Felder mitrequiredmarkiert und eine TypeScript-Validierung verhindert das Absenden leerer Felder. - Backend: In
Backend/src/main/java/de/itsolutions/ticketsystem/service/AuthService.java(Methoderegister) wird explizit geprüft, ob Vorname und Nachname vorhanden sind. Die Datenbank-EntitätUser.javasetztnullable = falsefür diese Felder.
-
Raumauswahl bei Registrierung für Raumbetreuer? Wo?
- Ja, wenn die Rolle "Raumbetreuer" gewählt wird, erscheint eine Checkbox-Liste aller verfügbaren Räume.
- Frontend:
Frontend/components/auth/register-form.tsx(Zeilen 233-259, bedingtes Rendering:{role === "RAUMBETREUER" && ...}).
-
Anmelden mit Email und Passwort funktioniert? Wo?
- Ja.
- Frontend:
Frontend/components/auth/login-form.tsxsendet die Daten annext-auth, welches den Backend-Endpoint aufruft. - Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/controller/AuthController.java(Endpoint/api/auth/login).
-
Persistente Anmeldung (keine Neuanmeldung bei jeder Nutzung)? Wie?
- Ja, durch die Verwendung von NextAuth.js im Frontend und JWT (implizit via Session/Header Verwaltung in
auth-context). - Frontend:
Frontend/lib/auth-context.tsxnutzt denuseSessionHook von NextAuth. EinuseEffectHook (Zeilen 64-77) synchronisiert den Sitzungsstatus beim Laden der Seite automatisch, sodass der Nutzer eingeloggt bleibt. Zusätzlich prüftvalidateSessionbei jeder Navigation die Gültigkeit beim Backend.
- Ja, durch die Verwendung von NextAuth.js im Frontend und JWT (implizit via Session/Header Verwaltung in
Ticketfunktionen Lehrer
-
Ticket kann erstellt werden? Wo?
- Ja, über das "Ticket erstellen" Formular im Dashboard.
- Frontend:
Frontend/components/tickets/create-ticket-form.tsx. - Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/controller/TicketController.java(POST/api/tickets).
-
Pflichtangaben (Raum, Titel, Beschreibung)? Wo?
- Ja.
- Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/entity/Ticket.javadefiniertroom,title, undownermit@Column(nullable = false). - Service:
Backend/src/main/java/de/itsolutions/ticketsystem/service/TicketService.javaprüft, ob der Raum existiert.
-
Automatische Speicherung von Erstellungsdatum und Status "offen"? Wo?
- Ja.
- Backend: In
Backend/src/main/java/de/itsolutions/ticketsystem/entity/Ticket.java:createdAtwird initialisiert mitLocalDateTime.now()(Zeile 34).statuswird initialisiert mit"OPEN"(Zeile 37).
-
Eigene Tickets werden tabellarisch angezeigt? Wo?
- Ja.
- Frontend:
Frontend/components/dashboard/teacher-dashboard.tsxnutzt die Komponente<TicketTable tickets={myTickets} />.
-
Sortierung nach Erstellungsdatum (absteigend)? Wo?
- Ja.
- Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/service/TicketService.javanutztticketRepository.findByOwnerIdOrderByCreatedAtDesc(user.getId())(Zeile 75).
Ticketfunktionen Raumbetreuer
-
Anzeige aller Tickets der betreuten Räume? Wo?
- Ja.
- Frontend:
Frontend/components/dashboard/supervisor-dashboard.tsxfiltert und zeigt Tickets für die betreuten Räume an. - Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/service/TicketService.javaermittelt dieroomIdsdes Betreuers und lädt passende Tickets (Zeilen 76-83).
-
Ticketinfos vollständig dargestellt? Wo?
- Ja, die Tabelle (
TicketTable) zeigt Titel, Raum, Status, Datum und Aktionen an. Details können (implizit durch die Struktur) eingesehen werden.
- Ja, die Tabelle (
-
Sortierung nach Erstellungsdatum (absteigend)? Wo?
- Ja.
- Backend:
TicketService.javanutztticketRepository.findByRoomIdInOrderByCreatedAtDesc(roomIds)(Zeile 83).
-
Änderung des Ticketstatus? Wo?
- Ja, direkt in der Tabelle im Dashboard.
- Frontend:
Frontend/components/dashboard/supervisor-dashboard.tsxübergibtshowStatusUpdate={true}an dieTicketTable. - Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/controller/TicketController.java(PATCH/api/tickets/{id}/status).
-
Statuswechsel wird korrekt gespeichert? Wo?
- Ja.
- Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/service/TicketService.javaMethodeupdateTicketStatuslädt das Ticket, setzt den neuen Status und speichert es mitticketRepository.save(ticket).
Navigation & Bedienlogik
-
Rollenabhängiger Zugriff auf Funktionen? Wo und Wie?
- Ja.
- Frontend: In
Frontend/lib/auth-context.tsxund den Dashboard-Komponenten (teacher-dashboard.tsxvssupervisor-dashboard.tsx) wird basierend aufuser.roleentschieden, welche Inhalte angezeigt werden. DasAppShellzeigt z.B. das "Admin"-Badge nur für Admins. - Backend:
TicketServiceliefert je nach Rolle (LEHRKRAFT,RAUMBETREUER,ADMIN) unterschiedliche Ticket-Listen zurück.
-
Fehlermeldung bei falscher Eingabe? Wo und Wie?
- Ja.
- Frontend:
Frontend/components/auth/register-form.tsxnutzt einenerrorState, um z.B. "Registrierung fehlgeschlagen" oder "Bitte akzeptieren Sie die Datenschutzerklärung" anzuzeigen. In anderen Teilen wird deruseToastHook verwendet, um Popups anzuzeigen.
Datenschutz & Sicherheit
-
Passwörter werden als Hash gespeichert? Wo und Wie?
- Ja, mittels BCrypt.
- Backend:
Backend/src/main/java/de/itsolutions/ticketsystem/service/AuthService.javanutztpasswordEncoder.encode(request.getPassword())vor dem Speichern (Zeile 56). - Konfiguration:
Backend/src/main/java/de/itsolutions/ticketsystem/config/SecurityConfig.javadefiniert dieBCryptPasswordEncoderBean.
-
Checkbox zur Datenschutzeinwilligung mit Datenschutzrichtlinien? Wo und Wie?
- Ja.
- Frontend:
Frontend/components/auth/register-form.tsxenthält eine Checkbox ("Ich akzeptiere die Datenschutzerklärung"), die angehakt sein muss, bevor der "Registrieren"-Button funktioniert (Zeilen 206-231).
Technische Qualität & Wartbarkeit
-
Saubere Backendstruktur? (Spring Boot, JPA)
- Ja, das Projekt folgt einer klassischen Schichtenarchitektur:
- Controller Layer (
de.itsolutions.ticketsystem.controller): Handhabt HTTP-Requests (REST). - Service Layer (
de.itsolutions.ticketsystem.service): Beinhaltet die Geschäftslogik (z.B.TicketService,AuthService). - Repository Layer (
de.itsolutions.ticketsystem.repository): Interface für Datenbankzugriffe (Spring Data JPA). - Entity Layer (
de.itsolutions.ticketsystem.entity): Bildet Datenbanktabellen als Java-Klassen ab (JPA/Hibernate). - DTOs (
de.itsolutions.ticketsystem.dto): Kapselt Daten für den Datentransfer, um Entitäten nicht direkt zu exponieren.
- Controller Layer (
- Ja, das Projekt folgt einer klassischen Schichtenarchitektur:
-
REST-API konsistent und JSON basiert? Wo und Wie?
- Ja.
- Alle Controller sind mit
@RestControllerannotiert. - Endpoints nutzen Standard-Methoden (
GET,POST,PUT,DELETE). - Daten werden als JSON gesendet (
@RequestBody) und empfangen (ResponseEntity<User>,ResponseEntity<Ticket>). - Beispiel:
AuthController(Authentifizierung),TicketController(Ticket-Verwaltung).
-
Anwendung stabil und reproduzierbar lauffähig?
- Ja, da die Anwendung vollständig containerisiert ist via Docker.
docker-compose.ymldefiniert die Services (Frontend, Backend, Datenbank), was eine konsistente Umgebung unabhängig vom Host-System garantiert.