LernApp/src/main/kotlin/com/oliver/kidio/backend/plugins/Routing.kt

99 lines
3.4 KiB
Kotlin
Raw Normal View History

package com.oliver.kidio.backend.plugins
import com.oliver.kidio.backend.*
import com.oliver.kidio.backend.domain.repository.KidioRepository
2026-09-04 10:54:10 +00:00
import com.oliver.kidio.backend.security.JwtService
import io.ktor.server.application.*
2026-09-04 10:54:10 +00:00
import io.ktor.server.auth.authenticate
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
2026-09-04 10:54:10 +00:00
fun Application.configureRouting(repository: KidioRepository, jwtService : JwtService) {
routing {
// Health-Check
get("/api/v1/health") {
call.respond(mapOf("status" to "OK", "message" to "Kidio Backend läuft!"))
}
2026-09-04 10:54:10 +00:00
post ("/api/v1/auth/login" ) {
val loginRequest = call.receive<LoginRequest>()
val token = jwtService.generateToken(userId = loginRequest.userId)
call.respond(mapOf("token" to token))
}
2026-09-04 10:54:10 +00:00
authenticate("auth-jwt") {
// 1. Alle verfügbaren Aufgaben abrufen
get("/api/v1/tasks") {
val tasks = repository.getAllTasks()
call.respond(tasks)
}
2026-09-04 10:54:10 +00:00
// 2. Antwort auf eine Aufgabe überprüfen
post("/api/v1/tasks/verify") {
val request = call.receive<TaskVerifyRequest>()
2026-09-04 10:54:10 +00:00
val taskInfo = repository.getTaskAnswerAndReward(request.taskId)
if (taskInfo == null) {
call.respond(
TaskVerifyResponse(
isCorrect = false,
earnedMinutes = 0,
message = "Aufgabe nicht gefunden!"
)
)
2026-09-04 10:54:10 +00:00
return@post
}
2026-09-04 10:54:10 +00:00
val (correctAnswer, reward) = taskInfo
val isCorrect = request.selectedAnswer.trim() == correctAnswer.trim()
2026-09-04 10:54:10 +00:00
if (isCorrect) {
val currentScreentime = repository.getScreentime("default_user")
val newSeconds = currentScreentime + (reward * 60)
repository.updateScreentime("default_user", newSeconds)
2026-09-04 10:54:10 +00:00
call.respond(
TaskVerifyResponse(
isCorrect = true,
earnedMinutes = reward,
message = "Super gemacht! Du hast $reward Minuten gewonnen."
)
)
2026-09-04 10:54:10 +00:00
} else {
call.respond(
TaskVerifyResponse(
isCorrect = false,
earnedMinutes = 0,
message = "Schade, das war leider falsch. Versuche es nochmal!"
)
)
2026-09-04 10:54:10 +00:00
}
}
2026-09-04 10:54:10 +00:00
// 3. Bildschirmzeit synchronisieren
post("/api/v1/screentime/sync") {
val request = call.receive<SyncRequest>()
2026-09-04 10:54:10 +00:00
val currentSeconds = repository.getScreentime(request.userId)
var newSeconds = currentSeconds - request.usedSecondsSinceLastSync
if (newSeconds < 0) newSeconds = 0
2026-09-04 10:54:10 +00:00
repository.updateScreentime(request.userId, newSeconds)
2026-09-04 10:54:10 +00:00
call.respond(
SyncResponse(
remainingSeconds = newSeconds,
isBlocked = newSeconds <= 0
)
)
2026-09-04 10:54:10 +00:00
}
}
}
}
2026-09-04 10:54:10 +00:00