diff --git a/src/main/java/icu/samnyan/aqua/sega/wacca/WaccaServer.kt b/src/main/java/icu/samnyan/aqua/sega/wacca/WaccaServer.kt index b5452739..d2527fe6 100644 --- a/src/main/java/icu/samnyan/aqua/sega/wacca/WaccaServer.kt +++ b/src/main/java/icu/samnyan/aqua/sega/wacca/WaccaServer.kt @@ -292,8 +292,7 @@ fun WaccaServer.init() { addItems(items as List>, 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) } diff --git a/src/main/java/icu/samnyan/aqua/sega/wacca/model/db/Repos.kt b/src/main/java/icu/samnyan/aqua/sega/wacca/model/db/Repos.kt index dd7d8f2b..6b1aec27 100644 --- a/src/main/java/icu/samnyan/aqua/sega/wacca/model/db/Repos.kt +++ b/src/main/java/icu/samnyan/aqua/sega/wacca/model/db/Repos.kt @@ -36,6 +36,8 @@ interface WcUserBestScoreRepo : IWaccaUserLinked { 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 } interface WcUserPlayLogRepo : IWaccaUserLinked, GenericPlaylogRepo interface WcUserStageUpRepo : IWaccaUserLinked