[+] Wacca: Calculate player rating server side

pull/29/head
Azalea 2024-03-29 05:53:00 -04:00
parent 70aed1d5db
commit be34915cdf
2 changed files with 13 additions and 4 deletions

View File

@ -292,8 +292,7 @@ fun WaccaServer.init() {
addItems(items as List<List<Int>>, u, itmGrp(u))
// Upsert playlog
val pl = WcUserPlayLog.parse(details as List<*>)
rp.playLog.save(pl.apply { user = u })
val pl = WcUserPlayLog.parse(details as List<*>).apply { user = u }
// Update best record
val best = rp.bestScore.save((rp.bestScore.findByUserAndMusicIdAndLevel(u, pl.musicId, pl.level)
@ -307,10 +306,18 @@ fun WaccaServer.init() {
rating = waccaRating(achievement, pl.levelConst)
})
// TODO: Update player rating - Best 35 old & 15 new
// ⭐ Calculate player rating ⭐
// Take the top 50 scores ranked by rating
pl.beforeRating = u.playerRating
val top50 = rp.bestScore.findTop50(u)
u.playerRating = top50.sumOf { it.rating }
pl.afterRating = u.playerRating
// Re-calculate user total score
rp.user.save(u.apply { totalScore = rp.bestScore.sumScoreByUser(u) })
u.totalScore = rp.bestScore.sumScoreByUser(u)
rp.user.save(u)
rp.playLog.save(pl)
ls(best.lsMusicUpdate(), ls(pl.musicId, best.clears[0]), "seasonalInfo" - (1..11).map { 0 }, "ranking" - empty)
}

View File

@ -36,6 +36,8 @@ interface WcUserBestScoreRepo : IWaccaUserLinked<WcUserScore> {
fun findByUserAndMusicIdAndLevel(user: WaccaUser, songId: Int, level: Int): WcUserScore?
@Query("SELECT SUM(achievement) FROM WcUserScore WHERE user = :user")
fun sumScoreByUser(user: WaccaUser): Long
@Query("SELECT WcUserScore FROM WcUserScore WHERE user = :user ORDER BY rating DESC LIMIT 50")
fun findTop50(user: WaccaUser): List<WcUserScore>
}
interface WcUserPlayLogRepo : IWaccaUserLinked<WcUserPlayLog>, GenericPlaylogRepo<WcUserPlayLog>
interface WcUserStageUpRepo : IWaccaUserLinked<WcUserStageUp>