diff --git a/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt b/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt index 8e187baa..662d2df4 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt @@ -4,10 +4,7 @@ import ext.API import ext.RP import ext.Str import icu.samnyan.aqua.net.db.AquaUserServices -import icu.samnyan.aqua.net.utils.TrendLog -import icu.samnyan.aqua.net.utils.chu3Scores -import icu.samnyan.aqua.net.utils.findTrend -import icu.samnyan.aqua.net.utils.genericUserSummary +import icu.samnyan.aqua.net.utils.* import icu.samnyan.aqua.sega.chusan.dao.userdata.UserDataRepository import icu.samnyan.aqua.sega.chusan.dao.userdata.UserGeneralDataRepository import icu.samnyan.aqua.sega.chusan.dao.userdata.UserPlaylogRepository @@ -42,4 +39,6 @@ class Chusan( genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition) } + + override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository) } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt b/src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt index 506eb9e2..6746e7fe 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt @@ -4,10 +4,7 @@ import ext.API import ext.RP import ext.Str import icu.samnyan.aqua.net.db.AquaUserServices -import icu.samnyan.aqua.net.utils.TrendLog -import icu.samnyan.aqua.net.utils.findTrend -import icu.samnyan.aqua.net.utils.genericUserSummary -import icu.samnyan.aqua.net.utils.mai2Scores +import icu.samnyan.aqua.net.utils.* import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserGeneralDataRepository import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserPlaylogRepository @@ -41,4 +38,6 @@ class Maimai2( genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition) } + + override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository) } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/games/Models.kt b/src/main/java/icu/samnyan/aqua/net/games/Models.kt index 53f2e9d7..7531814a 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Models.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Models.kt @@ -33,9 +33,22 @@ data class GenericGameSummary( val recent: List ) +data class GenericRankingPlayer( + val rank: Int, + val name: String, + val accuracy: Double, + val rating: Int, + val allPerfect: Int, + val fullCombo: Int, + val lastSeen: String +) + interface GameApiController { @API("trend") fun trend(@RP username: String): List @API("user-summary") fun userSummary(@RP username: String): GenericGameSummary + + @API("ranking") + fun ranking(): List } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt b/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt index df771b9c..8fdb1317 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt @@ -2,10 +2,7 @@ package icu.samnyan.aqua.net.games import ext.API import icu.samnyan.aqua.net.db.AquaUserServices -import icu.samnyan.aqua.net.utils.TrendLog -import icu.samnyan.aqua.net.utils.findTrend -import icu.samnyan.aqua.net.utils.genericUserSummary -import icu.samnyan.aqua.net.utils.ongekiScores +import icu.samnyan.aqua.net.utils.* import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserDataRepository import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserGeneralDataRepository import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserPlaylogRepository @@ -34,4 +31,6 @@ class Ongeki( genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, mapOf()) } + + override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository) } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/utils/GameHelper.kt b/src/main/java/icu/samnyan/aqua/net/utils/GameHelper.kt index c1986955..d1b49d3e 100644 --- a/src/main/java/icu/samnyan/aqua/net/utils/GameHelper.kt +++ b/src/main/java/icu/samnyan/aqua/net/utils/GameHelper.kt @@ -3,6 +3,7 @@ package icu.samnyan.aqua.net.utils import ext.minus import icu.samnyan.aqua.net.db.AquaNetUser import icu.samnyan.aqua.net.games.GenericGameSummary +import icu.samnyan.aqua.net.games.GenericRankingPlayer import icu.samnyan.aqua.net.games.RankCount import icu.samnyan.aqua.net.games.TrendOut import icu.samnyan.aqua.sega.general.model.Card @@ -88,7 +89,7 @@ fun genericUserSummary( name = user.userName, iconId = user.iconId, serverRank = userDataRepo.getRanking(user.playerRating), - accuracy = plays.sumOf { it.achievement }.toDouble() / plays.size, + accuracy = plays.sumOf { it.achievement }.toDouble() / plays.size / 10000.0, rating = user.playerRating, ratingHighest = user.highestRating, ranks = ranks.map { (k, v) -> RankCount(k, v) }, @@ -106,4 +107,24 @@ fun genericUserSummary( ) } +fun genericRanking( + userDataRepo: GenericUserDataRepo<*, *>, + userPlaylogRepo: GenericPlaylogRepo, +): List { + // TODO: pagination + val users = userDataRepo.findAll().sortedByDescending { it.playerRating } + return users.filter { it.card != null }.mapIndexed { i, user -> + val plays = userPlaylogRepo.findByUserCardExtId(user.card!!.extId) + + GenericRankingPlayer( + rank = i + 1, + name = user.userName, + accuracy = plays.sumOf { it.achievement }.toDouble() / plays.size / 10000.0, + rating = user.playerRating, + allPerfect = plays.count { it.achievement == 1010000 }, + fullCombo = plays.count { it.isFullCombo }, + lastSeen = user.lastPlayDate.toString() + ) + } +}