mirror of
https://github.com/dalbodeule/chibot-chzzk-bot.git
synced 2025-06-09 07:18:22 +00:00
add ApiCommandRoutes.kt
- add GET/PUT/POST/DELETE endpoints.
This commit is contained in:
parent
4c3300203b
commit
80dbf10e7e
@ -110,9 +110,12 @@ val server = embeddedServer(Netty, port = 8080, ) {
|
||||
|
||||
apiRoutes()
|
||||
apiSongRoutes()
|
||||
apiCommandRoutes()
|
||||
|
||||
wsTimerRoutes()
|
||||
wsSongRoutes()
|
||||
wsSongListRoutes()
|
||||
|
||||
swaggerUI("swagger-ui/index.html", "openapi/documentation.yaml") {
|
||||
options {
|
||||
version = "1.2.0"
|
||||
|
@ -0,0 +1,122 @@
|
||||
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.services.CommandService
|
||||
import space.mori.chzzk_bot.common.services.UserService
|
||||
import space.mori.chzzk_bot.webserver.UserSession
|
||||
|
||||
fun Routing.apiCommandRoutes() {
|
||||
route("/commands") {
|
||||
get("/{uid}") {
|
||||
val uid = call.parameters["uid"]
|
||||
val session = call.sessions.get<UserSession>()
|
||||
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 commands = CommandService.getCommands(user)
|
||||
|
||||
call.respond(HttpStatusCode.OK, commands.map {
|
||||
CommandsResponseDTO(it.command, it.content, it.failContent)
|
||||
})
|
||||
}
|
||||
|
||||
put("/{uid}") {
|
||||
val uid = call.parameters["uid"]
|
||||
val session = call.sessions.get<UserSession>()
|
||||
val commandRequest = call.receive<CommandsRequestDTO>()
|
||||
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
|
||||
}
|
||||
|
||||
CommandService.saveCommand(user,
|
||||
commandRequest.label,
|
||||
commandRequest.content,
|
||||
commandRequest.failContent ?: ""
|
||||
)
|
||||
call.respond(HttpStatusCode.OK)
|
||||
}
|
||||
|
||||
post("/{uid}") {
|
||||
val uid = call.parameters["uid"]
|
||||
val session = call.sessions.get<UserSession>()
|
||||
val commandRequest = call.receive<CommandsRequestDTO>()
|
||||
if(uid == null) {
|
||||
call.respond(HttpStatusCode.BadRequest, "UID is required")
|
||||
return@post
|
||||
}
|
||||
val user = UserService.getUser(uid)
|
||||
if(user == null || user.naverId != session?.id) {
|
||||
call.respond(HttpStatusCode.BadRequest, "User does not exist")
|
||||
return@post
|
||||
}
|
||||
|
||||
try {
|
||||
CommandService.updateCommand(
|
||||
user,
|
||||
commandRequest.label,
|
||||
commandRequest.content,
|
||||
commandRequest.failContent ?: ""
|
||||
)
|
||||
call.respond(HttpStatusCode.OK)
|
||||
} catch(e: Exception) {
|
||||
call.respond(HttpStatusCode.BadRequest)
|
||||
}
|
||||
}
|
||||
|
||||
delete("/{uid}") {
|
||||
val uid = call.parameters["uid"]
|
||||
val session = call.sessions.get<UserSession>()
|
||||
val commandRequest = call.receive<CommandsRequestDTO>()
|
||||
if(uid == null) {
|
||||
call.respond(HttpStatusCode.BadRequest, "UID is required")
|
||||
return@delete
|
||||
}
|
||||
val user = UserService.getUser(uid)
|
||||
if(user == null || user.naverId != session?.id) {
|
||||
call.respond(HttpStatusCode.BadRequest, "User does not exist")
|
||||
return@delete
|
||||
}
|
||||
|
||||
try {
|
||||
CommandService.removeCommand(user, commandRequest.label)
|
||||
call.respond(HttpStatusCode.OK)
|
||||
} catch(e: Exception) {
|
||||
call.respond(HttpStatusCode.BadRequest)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Serializable
|
||||
data class CommandsRequestDTO(
|
||||
val label: String,
|
||||
val content: String,
|
||||
val failContent: String?
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class CommandsResponseDTO(
|
||||
val label: String,
|
||||
val content: String,
|
||||
val failContent: String?
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user