Improve Performance

Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
2025-12-02 21:34:35 +01:00
parent 0a7a753c48
commit a089d42d9a
8 changed files with 45 additions and 60 deletions
+11 -25
View File
@@ -44,28 +44,8 @@ import java.util.*
data class ResponseSchematicType(val name: String, val db: String)
@Serializable
data class ResponseUser(val name: String, val uuid: String, val prefix: String, val perms: List<String>) {
private constructor(user: SteamwarUser) : this(user.userName, user.uuid.toString(), user.prefix().chatPrefix, user.perms().filter { !it.name.startsWith("PREFIX_") }.map { it.name })
companion object {
private val cache = mutableMapOf<Int, ResponseUser>()
fun get(id: Int): ResponseUser {
synchronized(cache) {
return cache[id] ?: ResponseUser(SteamwarUser.byId(id)!!).also { cache[id] = it }
}
}
fun get(user: SteamwarUser): ResponseUser = synchronized(cache) {
return cache[user.getId()] ?: ResponseUser(user).also { cache[user.getId()] = it }
}
fun clearCache() {
synchronized(cache) {
cache.clear()
}
}
}
data class ResponseUser(val name: String, val uuid: String) {
constructor(user: SteamwarUser) : this(user.userName, user.uuid.toString())
}
fun Route.configureDataRoutes() {
@@ -76,7 +56,13 @@ fun Route.configureDataRoutes() {
permission = UserPerm.MODERATION
}
get("/users") {
call.respond(useDb { SteamwarUser.all().map { ResponseUser.get(it) } })
val name = call.request.queryParameters["name"]
val limit = call.request.queryParameters["limit"]?.toIntOrNull() ?: 100
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 0
val includePerms = call.request.queryParameters["includePerms"]?.toBoolean() ?: false
val includeId = call.request.queryParameters["includeId"]?.toBoolean() ?: false
}
get("/teams") {
call.respond(Team.getAll().map { ResponseTeam(it) })
@@ -119,7 +105,7 @@ fun Route.configureDataRoutes() {
listOf(UserPerm.PREFIX_ADMIN, UserPerm.PREFIX_DEVELOPER, UserPerm.PREFIX_MODERATOR, UserPerm.PREFIX_SUPPORTER, UserPerm.PREFIX_BUILDER)
.associateWith { SteamwarUser.getUsersWithPerm(it) }
.mapKeys { UserPerm.prefixes[it.key]!!.chatPrefix }
.mapValues { it.value.map { ResponseUser.get(it) } }
.mapValues { it.value.map { ResponseUser(it) } }
)
}
get("/skin/{uuid}") {
@@ -138,7 +124,7 @@ fun Route.configureDataRoutes() {
route("/me") {
install(SWPermissionCheck)
get {
call.respond(ResponseUser.get(call.principal<SWAuthPrincipal>()!!.user))
call.respond(ResponseUser(call.principal<SWAuthPrincipal>()!!.user))
}
}
}