diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/services/UserService.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/services/UserService.kt index 05896eb..67df6af 100644 --- a/common/src/main/kotlin/space/mori/chzzk_bot/common/services/UserService.kt +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/services/UserService.kt @@ -1,7 +1,6 @@ package space.mori.chzzk_bot.common.services import org.jetbrains.exposed.dao.load -import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.transactions.transaction import space.mori.chzzk_bot.common.models.User import space.mori.chzzk_bot.common.models.Users @@ -35,7 +34,7 @@ object UserService { fun getUser(id: Int): User? { return transaction { - val user = User.findById(id) + val user = User.find{ Users.id eq id }.firstOrNull() user?.load(User::subordinates, User::managers) user } @@ -43,9 +42,7 @@ object UserService { fun getUser(discordID: Long): User? { return transaction { - val users = User.find(Users.discord eq discordID) - - val user = users.firstOrNull() + val user = User.find{ Users.discord eq discordID }.firstOrNull() user?.load(User::subordinates, User::managers) user } @@ -53,9 +50,7 @@ object UserService { fun getUser(chzzkID: String): User? { return transaction { - val users = User.find(Users.token eq chzzkID) - - val user = users.firstOrNull() + val user = User.find{ Users.token eq chzzkID }.firstOrNull() user?.load(User::subordinates, User::managers) user } @@ -63,9 +58,7 @@ object UserService { fun getUserWithGuildId(discordGuildId: Long): User? { return transaction { - val users = User.find(Users.liveAlertGuild eq discordGuildId) - - val user = users.firstOrNull() + val user = User.find { Users.liveAlertGuild eq discordGuildId }.firstOrNull() user?.load(User::subordinates, User::managers) user } @@ -73,9 +66,7 @@ object UserService { fun getUserWithNaverId(naverId: String): User? { return transaction { - val users = User.find(Users.naverId eq naverId) - - val user = users.firstOrNull() + val user = User.find{ Users.naverId eq naverId }.firstOrNull() user?.load(User::subordinates, User::managers) user } diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiCommandRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiCommandRoutes.kt index ab7bcc2..c6d3dad 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiCommandRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiCommandRoutes.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.serialization.Serializable +import org.jetbrains.exposed.sql.transactions.transaction import org.koin.java.KoinJavaComponent.inject import space.mori.chzzk_bot.common.events.CommandReloadEvent import space.mori.chzzk_bot.common.events.CoroutinesEventBus @@ -54,7 +55,10 @@ fun Routing.apiCommandRoutes() { return@put } - if(!user.managers.any { it.naverId == session?.id } && user.naverId != session?.id) { + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@put } @@ -84,7 +88,10 @@ fun Routing.apiCommandRoutes() { return@post } - if(!user.managers.any { it.naverId == session?.id } && user.naverId != session?.id) { + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@post } @@ -119,7 +126,10 @@ fun Routing.apiCommandRoutes() { return@delete } - if(!user.managers?.any { it.naverId == session?.id }!! ?: true && user.naverId != session?.id) { + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@delete } diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt index f1ddb57..a08c4b7 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiDiscordRoutes.kt @@ -7,6 +7,7 @@ import io.ktor.server.response.* import io.ktor.server.routing.* import io.ktor.server.sessions.* import kotlinx.serialization.Serializable +import org.jetbrains.exposed.sql.transactions.transaction import org.koin.java.KoinJavaComponent.inject import space.mori.chzzk_bot.common.events.CoroutinesEventBus import space.mori.chzzk_bot.common.services.UserService @@ -29,7 +30,11 @@ fun Route.apiDiscordRoutes() { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@get } - if(!user.managers?.any { it.naverId == session?.id }!! ?: true && user.naverId != session?.id) { + + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@get } @@ -58,7 +63,11 @@ fun Route.apiDiscordRoutes() { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@post } - if(!user.managers?.any { it.naverId == session?.id }!! ?: true && user.naverId != session?.id) { + + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@post } diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiRoutes.kt index 20aafbf..19b4ca8 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/ApiRoutes.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.serialization.Serializable +import org.jetbrains.exposed.sql.transactions.transaction import org.koin.java.KoinJavaComponent.inject import space.mori.chzzk_bot.common.events.CoroutinesEventBus import space.mori.chzzk_bot.common.events.UserRegisterEvent @@ -18,7 +19,7 @@ import space.mori.chzzk_bot.common.services.UserService import space.mori.chzzk_bot.common.utils.getStreamInfo import space.mori.chzzk_bot.common.utils.getUserInfo import space.mori.chzzk_bot.webserver.UserSession -import space.mori.chzzk_bot.webserver.utils.ChzzkUsercache +import space.mori.chzzk_bot.webserver.utils.ChzzkUserCache @Serializable data class GetUserDTO( @@ -68,8 +69,8 @@ fun Routing.apiRoutes() { call.respondText("Require UID", status = HttpStatusCode.NotFound) return@get } - val user = getStreamInfo(uid) - if(user.content == null) { + val user = ChzzkUserCache.getCachedUser(uid) + if(user?.content == null) { call.respondText("User not found", status = HttpStatusCode.NotFound) return@get } else { @@ -117,10 +118,12 @@ fun Routing.apiRoutes() { songConfig.streamerOnly, songConfig.disabled )) - val subordinates = user.subordinates - println(subordinates) + + val subordinates = transaction { + user.subordinates + } returnUsers.addAll(subordinates.map { - val subStatus = it.token?.let { token -> ChzzkUsercache.getCachedUser(token) } + val subStatus = it.token?.let { token -> ChzzkUserCache.getCachedUser(token) } return@map if (it.token == null || subStatus?.content == null) { null } else { 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 index c39c898..1526c66 100644 --- 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 @@ -7,6 +7,7 @@ import io.ktor.server.response.* import io.ktor.server.routing.* import io.ktor.server.sessions.* import kotlinx.serialization.Serializable +import org.jetbrains.exposed.sql.transactions.transaction import space.mori.chzzk_bot.common.events.TimerType import space.mori.chzzk_bot.common.services.TimerConfigService import space.mori.chzzk_bot.common.services.UserService @@ -27,7 +28,10 @@ fun Routing.apiTimerRoutes() { return@get } - if(!user.managers.any { it.naverId == session?.id } && user.naverId != session?.id) { + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@get } @@ -51,7 +55,10 @@ fun Routing.apiTimerRoutes() { return@put } - if(!user.managers.any { it.naverId == session?.id } && user.naverId != session?.id) { + val managers = transaction { + user.managers + } + if(!managers.any { it.naverId == session?.id } && user.naverId != session?.id) { call.respond(HttpStatusCode.BadRequest, "User does not exist") return@put } diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/ChzzkUserCache.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/ChzzkUserCache.kt index ca6b479..225d6b8 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/ChzzkUserCache.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/ChzzkUserCache.kt @@ -9,7 +9,7 @@ import space.mori.chzzk_bot.common.utils.getStreamInfo import java.time.Instant import java.util.concurrent.ConcurrentHashMap -object ChzzkUsercache { +object ChzzkUserCache { private val cache = ConcurrentHashMap() private const val EXP_SECONDS = 600L private val mutex = Mutex()