Only save new value if value changed

main
Kevin Belisle 2021-06-30 16:58:17 -04:00
parent a50a8a8ac9
commit 8a4caef4a1
1 changed files with 28 additions and 8 deletions

View File

@ -4,8 +4,7 @@ import com.beust.klaxon.*
import com.beust.klaxon.Klaxon
import java.io.File
import java.time.Instant
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.`java-time`.timestamp
import org.jetbrains.exposed.sql.transactions.transaction
import xyz.etztech.stonks.dsl.Statistics
@ -24,14 +23,35 @@ object StatisticsImporter {
val playerId = file.nameWithoutExtension
transaction(database) {
val maxExpr = Statistics.value.max()
val playerStats = emptyMap<String, MutableMap<String, Long>>().toMutableMap()
Statistics.slice(Statistics.type, Statistics.name, maxExpr)
.select { Statistics.playerId.eq(playerId) }
.groupBy(Statistics.type, Statistics.name)
.forEach {
if (playerStats.containsKey(it[Statistics.type])) {
playerStats[it[Statistics.type]]?.put(
it[Statistics.name], it[maxExpr]!!)
} else {
playerStats.put(
it[Statistics.type],
mapOf<String, Long>(it[Statistics.name] to it[maxExpr]!!)
.toMutableMap())
}
}
statsFile?.stats?.forEach { type, stats ->
stats.forEach { name, value ->
Statistics.insert {
it[Statistics.playerId] = playerId
it[Statistics.type] = type
it[Statistics.name] = name
it[Statistics.timestamp] = Instant.now() as Instant
it[Statistics.value] = value
if (playerStats.get(type)?.get(name) != value) {
Statistics.insert {
it[Statistics.playerId] = playerId
it[Statistics.type] = type
it[Statistics.name] = name
it[Statistics.timestamp] = Instant.now() as Instant
it[Statistics.value] = value
}
}
}
}