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