forked from SteamWar/SteamWar
@@ -34,6 +34,7 @@ import org.jetbrains.exposed.v1.dao.flushCache
|
||||
import org.jetbrains.exposed.v1.javatime.CurrentTimestamp
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import org.jetbrains.exposed.v1.jdbc.select
|
||||
import org.jetbrains.exposed.v1.jdbc.upsert
|
||||
|
||||
object LeaderboardTable : CompositeIdTable("Leaderboard") {
|
||||
val userId = reference("UserId", SteamwarUserTable)
|
||||
@@ -41,6 +42,8 @@ object LeaderboardTable : CompositeIdTable("Leaderboard") {
|
||||
val time = long("Time")
|
||||
val updatedAt = timestamp("UpdatedAt").defaultExpression(CurrentTimestamp)
|
||||
val bestTime = bool("BestTime")
|
||||
|
||||
override val primaryKey = PrimaryKey(userId, name)
|
||||
}
|
||||
|
||||
class Leaderboard(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
||||
@@ -71,20 +74,14 @@ class Leaderboard(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
||||
|
||||
@JvmStatic
|
||||
fun upsert(userId: Int, name: String, time: Long, bestTime: Boolean) = useDb {
|
||||
findById(CompositeID {
|
||||
LeaderboardTable.upsert(
|
||||
onUpdateExclude = listOf(LeaderboardTable.updatedAt, LeaderboardTable.userId, LeaderboardTable.name),
|
||||
where = { (LeaderboardTable.userId eq userId) and (LeaderboardTable.name eq name) }
|
||||
) {
|
||||
it[LeaderboardTable.userId] = userId
|
||||
it[LeaderboardTable.name] = name
|
||||
})?.also {
|
||||
it.time = time
|
||||
it.bestTime = bestTime
|
||||
} ?: new(
|
||||
CompositeID {
|
||||
it[LeaderboardTable.userId] = userId
|
||||
it[LeaderboardTable.name] = name
|
||||
}
|
||||
) {
|
||||
this.time = time
|
||||
this.bestTime = bestTime
|
||||
it[LeaderboardTable.time] = time
|
||||
it[LeaderboardTable.bestTime] = bestTime
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user