Find a file
2026-09-08 12:34:42 +00:00
.gradle Added authentication 2026-09-04 12:54:10 +02:00
.idea fix: gradle setup for latest version 2026-09-03 14:08:05 +02:00
build fix: gradle setup for latest version 2026-09-03 14:08:05 +02:00
gradle final first push 2026-09-02 15:28:58 +02:00
src integreating Register and Login Endpoint 2026-09-08 10:43:12 +02:00
.gitignore added gitignore 2026-09-04 12:42:29 +02:00
build.gradle.kts integreating Register and Login Endpoint 2026-09-08 10:43:12 +02:00
gradle.properties final first push 2026-09-02 15:28:58 +02:00
gradlew final first push 2026-09-02 15:28:58 +02:00
gradlew.bat final first push 2026-09-02 15:28:58 +02:00
Kidio_backend.iml final first push 2026-09-02 15:28:58 +02:00
README.md integreating Register and Login Endpoint 2026-09-08 10:43:12 +02:00
settings.gradle.kts final first push 2026-09-02 15:28:58 +02:00

Kidio Backend

Das Kidio-Backend ist eine gamifizierte Lösung zur Verwaltung von Bildschirmzeit für Kinder. Die Anwendung basiert auf dem Ktor-Framework in Kotlin und kombiniert PostgreSQL für die Persistenz mit Redis als Caching-Layer für schnelle Zugriffszeiten.

Kinder können durch das Lösen von Lernaufgaben (z. B. Mathe-Aufgaben) zusätzliche Bildschirmzeit erwerben, während das System ihre verbrauchte Bildschirmzeit synchronisiert und bei Ablauf sperrt.


Features

Hier ist eine Übersicht der implementierten Kernfunktionen des Kidio-Backends:

Name Beschreibung
JWT Authentifizierung Sichere API-Endpunkte für authentifizierte Benutzer über JSON Web Tokens (JWT).
Lernaufgaben (Tasks) Abrufen von interaktiven Lernaufgaben mit vordefinierten Antwortmöglichkeiten und Belohnungen (z. B. Minuten).
Antwort-Verifizierung Überprüfung der vom Kind ausgewählten Antworten. Bei korrekter Antwort wird die Belohnung direkt auf die verbleibende Bildschirmzeit aufgerechnet.
Bildschirmzeit-Synchronisation Laufender Datenabgleich der genutzten Bildschirmzeit. Sinkt die Zeit auf oder unter Null, wird der Status automatisch auf isBlocked = true gesetzt.
Zwei-Ebenen-Speicher Datenhaltung in PostgreSQL (via JetBrains Exposed ORM) kombiniert mit Redis-Caching (via Jedis) für optimale Performance bei der Screentime-Abfrage.
Fallback-Mechanismus Ist die Redis-Instanz nicht erreichbar, fällt das System automatisch und transparent auf PostgreSQL zurück.

Technologiestack

  • Framework: Ktor (Kotlin-basiertes asynchrones Web-Framework)
  • Datenbank-ORM: JetBrains Exposed
  • Persistenz: PostgreSQL
  • Caching: Redis (via Jedis Client)
  • Sicherheit & Auth: JWT (Java JWT von auth0)
  • Serialization: Kotlinx Serialization (JSON)
  • Testing: Ktor Server Testing, JUnit

API-Endpunkte

Alle Endpunkte befinden sich unter dem Präfix /api/v1.

Öffentliche Endpunkte

1. Health-Check

  • Methode: GET
  • Pfad: /api/v1/health
  • Beschreibung: Prüft, ob der Backend-Server ordnungsgemäß läuft.
  • Antwort:
    {
      "status": "OK",
      "message": "Kidio Backend läuft!"
    }
    

2. Benutzer-Login (Auth-Token abholen)

  • Methode: POST
  • Pfad: /api/v1/auth/login
  • Request-Body:
    {
      "userId": "default_user"
    }
    
  • Antwort:
    {
      "token": "eyJhbGciOiJIUzI1NiIsIn..."
    }
    

Geschützte Endpunkte (Erfordern JWT im Authorization: Bearer <Token> Header)

3. Alle verfügbaren Aufgaben abrufen

  • Methode: GET
  • Pfad: /api/v1/tasks
  • Beschreibung: Liefert eine Liste aller verfügbaren Lernaufgaben.
  • Antwort:
    [
      {
        "id": "t1",
        "question": "Was ist 12 + 15?",
        "options": ["25", "27", "30", "22"],
        "rewardMinutes": 10
      }
    ]
    

4. Antwort überprüfen & Belohnung verbuchen

  • Methode: POST
  • Pfad: /api/v1/tasks/verify
  • Request-Body:
    {
      "taskId": "t1",
      "selectedAnswer": "27"
    }
    
  • Antwort (Erfolg):
    {
      "isCorrect": true,
      "earnedMinutes": 10,
      "message": "Super gemacht! Du hast 10 Minuten gewonnen."
    }
    
  • Antwort (Fehler):
    {
      "isCorrect": false,
      "earnedMinutes": 0,
      "message": "Schade, das war leider falsch. Versuche es nochmal!"
    }
    

5. Bildschirmzeit synchronisieren

  • Methode: POST
  • Pfad: /api/v1/screentime/sync
  • Beschreibung: Zieht die seit dem letzten Abgleich verbrauchten Sekunden von der verfügbaren Bildschirmzeit ab.
  • Request-Body:
    {
      "userId": "default_user",
      "usedSecondsSinceLastSync": 200
    }
    
  • Antwort:
    {
      "remainingSeconds": 1600,
      "isBlocked": false
    }
    

Projektkonfiguration und Umgebungsvariablen

Das Projekt wird über die Datei src/main/resources/application.yaml konfiguriert. Folgende Umgebungsvariablen können zur flexiblen Docker- oder Deployment-Konfiguration übergeben werden:

Variable Beschreibung Standardwert
DB_HOST Hostname der PostgreSQL-Datenbank localhost / aus application.yaml
DB_PORT Port der PostgreSQL-Datenbank 5432 / aus application.yaml
DB_NAME Name der PostgreSQL-Datenbank kidio_db
DB_USER PostgreSQL-Benutzername kidio_admin
DB_PASSWORD PostgreSQL-Passwort learning
REDIS_HOST Hostname der Redis-Instanz localhost
REDIS_PORT Port der Redis-Instanz 6379
JWT_SECRET Geheimer Schlüssel zur Signierung der JWTs super-geheimes-secret-fuer-dev

Lokale Entwicklung, Bauen & Testen

Zur Ausführung des Projekts werden die folgenden Gradle-Tasks bereitgestellt:

Task Beschreibung
./gradlew test Führt alle automatisierten Unit- und Integrationstests aus (nutzt die InMemory-Repository-Implementierung).
./gradlew build Kompiliert das Projekt und baut das Artefakt.
./gradlew run Startet den Ktor-Entwicklungsserver lokal auf Port 8080.
# Tests ausführen
./gradlew test

# Server starten
./gradlew run

Sobald der Server erfolgreich gestartet ist, ist er unter http://localhost:8080 erreichbar.