Improve Performance
All checks were successful
SteamWarCI Build successful

Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
2025-12-02 21:13:43 +01:00
parent 7c5a927d0f
commit 86bfde90b8

View File

@@ -32,6 +32,7 @@ import io.ktor.server.routing.Route
import io.ktor.server.routing.get
import io.ktor.server.routing.route
import kotlinx.serialization.Serializable
import org.jetbrains.exposed.v1.core.Alias
import org.jetbrains.exposed.v1.core.JoinType
import org.jetbrains.exposed.v1.core.SortOrder
import org.jetbrains.exposed.v1.core.alias
@@ -41,8 +42,10 @@ import org.jetbrains.exposed.v1.core.isNull
import org.jetbrains.exposed.v1.core.less
import org.jetbrains.exposed.v1.core.like
import org.jetbrains.exposed.v1.core.or
import org.jetbrains.exposed.v1.jdbc.Query
import org.jetbrains.exposed.v1.jdbc.andWhere
import org.jetbrains.exposed.v1.jdbc.select
import org.jetbrains.exposed.v1.jdbc.selectAll
import java.time.Instant
fun Route.configureAuditLog() {
@@ -126,34 +129,32 @@ data class PagedAuditLog(val rows: Long, val entries: List<AuditLogEntry>) {
*AuditLogTable.columns.toTypedArray()
)
actionText?.let {
query.andWhere { (AuditLogTable.actionText like "%$it%") }
}
serverText?.let {
query.andWhere { (AuditLogTable.server like "%$it%") }
}
fullText?.let {
query.andWhere { (AuditLogTable.actionText like "%$it%") or (AuditLogTable.server like "%$it%") }
}
actor?.let { query.andWhere { actorTable[SteamwarUserTable.uuid] inList actor } }
actionType?.let { query.andWhere { AuditLogTable.action inList actionType } }
timeGreater?.let { query.andWhere { AuditLogTable.time greater timeGreater } }
timeLess?.let { query.andWhere { AuditLogTable.time less timeLess } }
serverOwner?.let { query.andWhere { serverOwnerTable[SteamwarUserTable.uuid] inList serverOwner } }
if (velocity == true) query.andWhere { AuditLogTable.serverOwner.isNull() }
PagedAuditLog(
query.count(),
AuditLogTable.selectAll().addAuditLogFilters(
actionText,
serverText,
fullText,
actor,
actionType,
timeGreater,
timeLess,
serverOwner,
velocity
).count(),
query
.addAuditLogFilters(
actionText,
serverText,
fullText,
actor,
actionType,
timeGreater,
timeLess,
serverOwner,
velocity,
actorTable,
serverOwnerTable
)
.limit(limit)
.offset((page * limit).toLong())
.orderBy(AuditLogTable.time, SortOrder.valueOf(sorting.uppercase()))
@@ -170,6 +171,38 @@ data class PagedAuditLog(val rows: Long, val entries: List<AuditLogEntry>) {
},
)
}
private fun Query.addAuditLogFilters(
actionText: String? = null,
serverText: String? = null,
fullText: String? = null,
actor: Set<String>? = null,
actionType: Set<AuditLog.Type>? = null,
timeGreater: Instant? = null,
timeLess: Instant? = null,
serverOwner: Set<String>? = null,
velocity: Boolean? = null,
actorTable: Alias<SteamwarUserTable>? = null,
serverOwnerTable: Alias<SteamwarUserTable>? = null
): Query {
actionText?.let {
andWhere { (AuditLogTable.actionText like "%$it%") }
}
serverText?.let {
andWhere { (AuditLogTable.server like "%$it%") }
}
fullText?.let {
andWhere { (AuditLogTable.actionText like "%$it%") or (AuditLogTable.server like "%$it%") }
}
actor?.let { andWhere { actorTable!![SteamwarUserTable.uuid] inList actor } }
actionType?.let { andWhere { AuditLogTable.action inList actionType } }
timeGreater?.let { andWhere { AuditLogTable.time greater timeGreater } }
timeLess?.let { andWhere { AuditLogTable.time less timeLess } }
serverOwner?.let { andWhere { serverOwnerTable!![SteamwarUserTable.uuid] inList serverOwner } }
if (velocity == true) andWhere { AuditLogTable.serverOwner.isNull() }
return this
}
}
}