mirror of
https://github.com/MewoLab/AquaDX.git
synced 2026-02-09 03:47:26 +08:00
[+] Ranking endpoint
This commit is contained in:
@@ -4,10 +4,7 @@ import ext.API
|
|||||||
import ext.RP
|
import ext.RP
|
||||||
import ext.Str
|
import ext.Str
|
||||||
import icu.samnyan.aqua.net.db.AquaUserServices
|
import icu.samnyan.aqua.net.db.AquaUserServices
|
||||||
import icu.samnyan.aqua.net.utils.TrendLog
|
import icu.samnyan.aqua.net.utils.*
|
||||||
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.sega.chusan.dao.userdata.UserDataRepository
|
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.UserGeneralDataRepository
|
||||||
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserPlaylogRepository
|
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserPlaylogRepository
|
||||||
@@ -42,4 +39,6 @@ class Chusan(
|
|||||||
|
|
||||||
genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition)
|
genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
|
||||||
}
|
}
|
||||||
@@ -4,10 +4,7 @@ import ext.API
|
|||||||
import ext.RP
|
import ext.RP
|
||||||
import ext.Str
|
import ext.Str
|
||||||
import icu.samnyan.aqua.net.db.AquaUserServices
|
import icu.samnyan.aqua.net.db.AquaUserServices
|
||||||
import icu.samnyan.aqua.net.utils.TrendLog
|
import icu.samnyan.aqua.net.utils.*
|
||||||
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.sega.maimai2.dao.userdata.UserDataRepository
|
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.UserGeneralDataRepository
|
||||||
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserPlaylogRepository
|
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserPlaylogRepository
|
||||||
@@ -41,4 +38,6 @@ class Maimai2(
|
|||||||
|
|
||||||
genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition)
|
genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
|
||||||
}
|
}
|
||||||
@@ -33,9 +33,22 @@ data class GenericGameSummary(
|
|||||||
val recent: List<IGenericGamePlaylog>
|
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 {
|
interface GameApiController {
|
||||||
@API("trend")
|
@API("trend")
|
||||||
fun trend(@RP username: String): List<TrendOut>
|
fun trend(@RP username: String): List<TrendOut>
|
||||||
@API("user-summary")
|
@API("user-summary")
|
||||||
fun userSummary(@RP username: String): GenericGameSummary
|
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 ext.API
|
||||||
import icu.samnyan.aqua.net.db.AquaUserServices
|
import icu.samnyan.aqua.net.db.AquaUserServices
|
||||||
import icu.samnyan.aqua.net.utils.TrendLog
|
import icu.samnyan.aqua.net.utils.*
|
||||||
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.sega.ongeki.dao.userdata.UserDataRepository
|
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.UserGeneralDataRepository
|
||||||
import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserPlaylogRepository
|
import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserPlaylogRepository
|
||||||
@@ -34,4 +31,6 @@ class Ongeki(
|
|||||||
|
|
||||||
genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, mapOf())
|
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 ext.minus
|
||||||
import icu.samnyan.aqua.net.db.AquaNetUser
|
import icu.samnyan.aqua.net.db.AquaNetUser
|
||||||
import icu.samnyan.aqua.net.games.GenericGameSummary
|
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.RankCount
|
||||||
import icu.samnyan.aqua.net.games.TrendOut
|
import icu.samnyan.aqua.net.games.TrendOut
|
||||||
import icu.samnyan.aqua.sega.general.model.Card
|
import icu.samnyan.aqua.sega.general.model.Card
|
||||||
@@ -88,7 +89,7 @@ fun genericUserSummary(
|
|||||||
name = user.userName,
|
name = user.userName,
|
||||||
iconId = user.iconId,
|
iconId = user.iconId,
|
||||||
serverRank = userDataRepo.getRanking(user.playerRating),
|
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,
|
rating = user.playerRating,
|
||||||
ratingHighest = user.highestRating,
|
ratingHighest = user.highestRating,
|
||||||
ranks = ranks.map { (k, v) -> RankCount(k, v) },
|
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