forked from Cookies_Github_mirror/AquaDX
[+] Ranking endpoint
This commit is contained in:
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -33,9 +33,22 @@ data class GenericGameSummary(
|
||||
val recent: List<IGenericGamePlaylog>
|
||||
)
|
||||
|
||||
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<TrendOut>
|
||||
@API("user-summary")
|
||||
fun userSummary(@RP username: String): GenericGameSummary
|
||||
|
||||
@API("ranking")
|
||||
fun ranking(): List<GenericRankingPlayer>
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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<GenericRankingPlayer> {
|
||||
// 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()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user