Skip to content

Backend API

Philipp Vogel edited this page Jan 26, 2024 · 7 revisions

Dokumentation

Lokales Deployment

Diese Dokumentation beschreibt die Schritte zum lokalen Starten der Spring Boot API mit Docker Compose und der Konfiguration der Umgebungsvariablen. Es wurde zudem eine Swagger Dokumentation aufgesetzt, welche ein UI zum Testen der Endpunkte zur Verfügung stellt. Das UI lässt sich lokal unter http://localhost:8080/documentation öffnen. Das Swagger yaml-file unter http://localhost:8080/documentation/docs.

Voraussetzungen

  • Docker ist auf dem lokalen System installiert und läuft.
  • Eine .env-Datei mit den erforderlichen Umgebungsvariablen.

Umgebungsvariablen Lokal

DB_URL=jdbc:postgresql://localhost:5432/postgres
DB_USERNAME=postgres
DB_PASSWORD=uk<t58w3nsV_.S)
ACCESS_TOKEN_SECRET=Akd(dj3!kdcNml/ws)!
REFRESH_TOKEN_SECRET=Ldoge(skM(2!asScaeF?
TOKEN_ISSUER=StudentTimer
ACCESS_TOKEN_EXPIRATION=86400000
REFRESH_TOKEN_EXPIRATION=7776000000
GOOGLE_CLIENT_ID=698641812741-rdmgr3i2le79rgnjk57qpkj1of1hvdho.apps.googleusercontent.com

Lokales Starten der Anwendung

Docker Compose

Stelle sicher, dass die .env-Datei im gleichen Verzeichnis wie die compose.yml liegt.

Starten des Docker-Containers

Führe den folgenden Befehl im Terminal im Verzeichnis der docker-compose.yml-Datei aus:

docker-compose up

Dadurch werden die Container für die PostgreSQL-Datenbank und die Spring Boot-Anwendung gestartet.

Überprüfen des Container-Status

Verwende den Befehl docker ps -a, um sicherzustellen, dass die Container erfolgreich gestartet wurden und laufen.

Hinweise zur Konfiguration

Docker Compose

db Service: Verwendet das PostgreSQL-Image und definiert das Datenbank-Passwort über die Umgebungsvariable POSTGRES_PASSWORD. Ist über Port 5432 erreichbar.

app Service: Baut das Spring Boot-Image gemäß dem Dockerfile und setzt Umgebungsvariablen für die Datenbank- und JWT-Konfiguration. Exponiert die Anwendung über Port 8080.

.env-Datei: Die .env-Datei enthält sensible Informationen und Umgebungsvariablen für die Anwendung.

application.properties: Die application.properties-Datei konfiguriert die Datenbankverbindung und andere Anwendungsvariablen für die Spring Boot-Anwendung. Hier findet man auch die Konfiguration der Swagger Pfade.

Deployment Production

Die Anwendung und die Datenbank sind auf render.com gehostet. Die Anwendung läuft in einem Docker Container und ist unter https://student-timer-backend.onrender.com. Render.com ist mit der "backend-production" Branch von Github synchronisiert. Es wurde eine Swagger Dokumentation aufgesetzt, welche ein UI zum Testen der Endpunkte zur Verfügung stellt. Das UI lässt sich lokal unter Swagger Dokumentation öffnen. Das Swagger yaml-file unter https://student-timer-backend.onrender.com/documentation/docs. Sowohl die Datenbank als auch die Anwendung wird bei Inaktivität heruntergefahren. Es kann also zu Fehlern führen, wenn man das Backend länger nicht angesprochen wurde.

Es müssen folgende Umgebungsvariablen in render gesetzt werden:

DB_URL=jdbc:postgresql://dpg-clq5ji2e9h4c73aii70g-a:5432/db_jfnf
DB_USERNAME=admin
DB_PASSWORD=YiO9y2i3aooO7bjBmDacxshu42Xk84G4
ACCESS_TOKEN_SECRET=Akd(dj3!kdcNml/ws)!
REFRESH_TOKEN_SECRET=Ldoge(skM(2!asScaeF?
TOKEN_ISSUER=StudentTimer
ACCESS_TOKEN_EXPIRATION=86400000
REFRESH_TOKEN_EXPIRATION=7776000000
GOOGLE_CLIENT_ID=698641812741-vp91l41gmncosha4m973idpbmp13vk8v.apps.googleusercontent.com

Externer Zugriff Datenbank Production

Host=dpg-clq5ji2e9h4c73aii70g-a.frankfurt-postgres.render.com
Datenbank=db_jfnf
Benutzername=admin
Passwort=YiO9y2i3aooO7bjBmDacxshu42Xk84G4
Port:5432

Endpunkte

Student Controller

Methode Pfad Beschreibung
GET /students/{studentId} Ruft einen Studenten ab
PUT /students/{studentId} Aktualisiert Studentendaten
DELETE /students/{studentId} Löscht einen Studenten

Modul Controller

Methode Pfad Beschreibung
GET /students/{studentId}/modules Ruft alle Module eines Studenten ab
GET /students/{studentId}/modules/{id} Ruft ein Modul eines Studenten ab
POST /students/{studentId}/modules Erstellt ein neues Modul
PUT /students/{studentId}/modules/{id} Aktualisiert Moduldaten
DELETE /students/{studentId}/modules/{id} Löscht ein Modul

Learning Unit Controller

Methode Pfad Beschreibung
GET /students/{studentId}/modules/{moduleId}/learningUnits Ruft alle Lerneinheiten eines Moduls ab
GET /students/{studentId}/modules/{moduleId}/learningUnits/{learningUnitId} Ruft eine Lerneinheit eines Moduls ab
POST /students/{studentId}/modules/{moduleId}/learningUnits Erstellt eine neue Lerneinheit
PUT /students/{studentId}/modules/{moduleId}/learningUnits/{learningUnitId} Aktualisiert Lerneinheitendaten
DELETE /students/{studentId}/modules/{moduleId}/learningUnits/{learningUnitId} Löscht eine Lerneinheit

Learning Session Controller

Methode Pfad Beschreibung
GET /students/{studentId}/modules/{moduleId}/learningSessions Ruft alle Lernsessions eines Moduls ab
GET /students/{studentId}/modules/{moduleId}/learningSessions/{learningSessionId} Ruft eine Lernsession eines Moduls ab
POST /students/{studentId}/modules/{moduleId}/learningSessions Erstellt eine neue Lernsession
PUT /students/{studentId}/modules/{moduleId}/learningSessions/{learningSessionId} Aktualisiert Lernsessionendaten
DELETE /students/{studentId}/modules/{moduleId}/learningSessions/{learningSessionId} Löscht eine Lernsession

Authentifizierungs-Controller

Methode Pfad Beschreibung
POST /auth/login Führt die Anmeldung eines Studenten durch
POST /auth/refreshToken Erstellt ein neues Zugriffstoken mittels Refresh-Token
POST /auth/verifyAccessToken Validiert ein Zugriffstoken (nur für Testzwecke)
POST /auth/verifyRefreshToken Validiert ein Refresh-Token (nur für Testzwecke)
POST /auth/signUp Erstellt einen neuen Studenten im System