From 1b49780caebcfe723d4d161e3906ff21a61d719d Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:40:52 +0900 Subject: [PATCH] add ApiTimerRoutes endpoint --- .../space/mori/chzzk_bot/webserver/Main.kt | 1 + .../webserver/routes/ApiTimerRoutes.kt | 63 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiTimerRoutes.kt diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt index 7efba31..994653e 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/Main.kt @@ -111,6 +111,7 @@ val server = embeddedServer(Netty, port = 8080, ) { apiRoutes() apiSongRoutes() apiCommandRoutes() + apiTimerRoutes() wsTimerRoutes() wsSongRoutes() diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiTimerRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiTimerRoutes.kt new file mode 100644 index 0000000..12b0224 --- /dev/null +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiTimerRoutes.kt @@ -0,0 +1,63 @@ +package space.mori.chzzk_bot.webserver.routes + +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import io.ktor.server.sessions.* +import kotlinx.serialization.Serializable +import space.mori.chzzk_bot.common.events.TimerType +import space.mori.chzzk_bot.common.services.TimerConfigService +import space.mori.chzzk_bot.common.services.UserService +import space.mori.chzzk_bot.webserver.UserSession + +fun Routing.apiTimerRoutes() { + route("/timerapi") { + get("/{uid}") { + val uid = call.parameters["uid"] + val session = call.sessions.get() + if(uid == null) { + call.respond(HttpStatusCode.BadRequest, "UID is required") + return@get + } + val user = UserService.getUser(uid) + if(user == null || user.naverId != session?.id) { + call.respond(HttpStatusCode.BadRequest, "User does not exist") + return@get + } + + val timerConfig = TimerConfigService.getConfig(user) + + call.respond(HttpStatusCode.OK, TimerResponseDTO(timerConfig?.option ?: 0)) + } + + put("/{uid}") { + val uid = call.parameters["uid"] + val session = call.sessions.get() + val request = call.receive() + if(uid == null) { + call.respond(HttpStatusCode.BadRequest, "UID is required") + return@put + } + val user = UserService.getUser(uid) + if(user == null || user.naverId != session?.id) { + call.respond(HttpStatusCode.BadRequest, "User does not exist") + return@put + } + + TimerConfigService.saveOrUpdateConfig(user, TimerType.entries[request.option]) + call.respond(HttpStatusCode.OK) + } + } +} + +@Serializable +data class TimerRequestDTO( + val option: Int +) + +@Serializable +data class TimerResponseDTO( + val option: Int +)