proj/SYSTEM_UEBERSICHT.md
2026-02-10 08:22:29 +01:00

2.6 KiB

Systemübersicht & Verwendete Technologien

Frontend

Das Frontend wurde als moderne Single-Page-Application (SPA) entwickelt und setzt auf folgende Technologien:

  • Framework: Next.js 16 (React 19)
    • Sprache: TypeScript
    • Routing: App Router
  • Styling: Tailwind CSS
    • Komponentenbibliothek: Shadcn UI (basiert auf Radix UI)
    • Icons: Lucide React
  • State & Form Management:
    • React Hook Form (Formularvalidierung)
    • Zod (Schema-Validierung)
  • Authentifizierung: NextAuth.js
  • Visualisierung: Recharts (Diagramme)
  • Datum/Zeit: Date-fns

Backend

Das Backend ist als RESTful API konzipiert und basiert auf dem Spring Boot Framework:

  • Framework: Spring Boot 3.2.2
    • Sprache: Java 21
  • Sicherheit: Spring Security (JWT / Session Handling, CORS Konfiguration)
  • Datenbankzugriff: Spring Data JPA (Hibernate)
  • Tools: Lombok (zur Reduzierung von Boilerplate-Code)
  • Build Tool: Maven

Datenbank

Als Datenbank kommt ein relationales Datenbankmanagementsystem zum Einsatz:

  • System: PostgreSQL 16 (Betrieb via Docker)
  • Name: ticketsystem
  • Verbindung: JDBC

Probleme & Lösungen

CORS (Cross-Origin Resource Sharing)

Ein wesentliches Problem während der Entwicklung war die CORS-Konfiguration (Cross-Origin Resource Sharing).

  • Problem: Da Frontend (z.B. localhost:3000) und Backend (z.B. localhost:8080 oder Docker-Netzwerk) auf unterschiedlichen Origins laufen, blockierten Browser standardmäßig die API-Anfragen des Frontends aus Sicherheitsgründen.
  • Lösung: Implementierung einer globalen CORS-Konfiguration im Backend (SecurityConfig.java).
    • Es wurde eine CorsConfigurationSource definiert.
    • Explizite Freigabe der erlaubten Origins:
      • http://localhost:3000 (Lokale Entwicklung)
      • https://projekt.lona-development.org (Produktion Frontend)
      • https://projektbackend.lona-development.org (Produktion Backend)
    • Erlaubte HTTP-Methoden: GET, POST, PUT, PATCH, DELETE, OPTIONS.
    • Credentials (setAllowCredentials(true)) wurden aktiviert, um Authentifizierungs-Cookies/Header zuzulassen.

Weitere Herausforderungen

  • Docker Networking: Konfiguration der Kommunikation zwischen Frontend- und Backend-Containern über das interne Docker-Netzwerk (ticketsystem-network), während das Frontend teilweise auch clientseitig (im Browser des Users) auf die API zugreifen muss. Die Lösung bestand darin, Umgebungsvariablen für API-URLs flexibel zu gestalten (NEXT_PUBLIC_API_URL).