[+] Recent endpoint

This commit is contained in:
Azalea 2024-03-03 17:46:22 -05:00
parent b0ffda42bc
commit a4bbc9c3c6
5 changed files with 35 additions and 20 deletions

View File

@ -2,6 +2,7 @@ package icu.samnyan.aqua.net.db
import com.fasterxml.jackson.annotation.JsonIgnore
import ext.Str
import ext.async
import ext.isValidEmail
import ext.minus
import icu.samnyan.aqua.sega.allnet.KeychipSession
@ -111,13 +112,13 @@ class AquaUserServices(
}
}
fun <T> byName(username: Str, callback: (AquaNetUser) -> T) =
userRepo.findByUsernameIgnoreCase(username)?.let(callback) ?: (404 - "User not found")
suspend fun <T> byName(username: Str, callback: suspend (AquaNetUser) -> T) =
async { userRepo.findByUsernameIgnoreCase(username) }?.let { callback(it) } ?: (404 - "User not found")
fun <T> cardByName(username: Str, callback: (Card) -> T) =
suspend fun <T> cardByName(username: Str, callback: suspend (Card) -> T) =
if (username.startsWith("user")) username.substring(4).toLongOrNull()
?.let { cardRepo.findById(it).getOrNull() }
?.let(callback) ?: (404 - "Card not found")
?.let { callback(it) } ?: (404 - "Card not found")
else byName(username) { callback(it.ghostCard) }
fun checkUsername(username: Str) = username.apply {

View File

@ -21,7 +21,7 @@ class Chusan(
val userGeneralDataRepository: UserGeneralDataRepository
): GameApiController
{
override fun trend(@RP username: Str): List<TrendOut> = us.cardByName(username) { card ->
override suspend fun trend(@RP username: Str): List<TrendOut> = us.cardByName(username) { card ->
findTrend(userPlaylogRepository.findByUser_Card_ExtId(card.extId)
.map { TrendLog(it.playDate.toString(), it.playerRating) })
}
@ -29,7 +29,7 @@ class Chusan(
// Only show > AAA rank
private val shownRanks = chu3Scores.filter { it.first >= 95 * 10000 }
override fun userSummary(@RP username: Str) = us.cardByName(username) { card ->
override suspend fun userSummary(@RP username: Str) = us.cardByName(username) { card ->
// Summary values: total plays, player rating, server-wide ranking
// number of each rank, max combo, number of full combo, number of all perfect
val extra = userGeneralDataRepository.findByUser_Card_ExtId(card.extId)
@ -42,7 +42,11 @@ class Chusan(
genericUserSummary(card, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition)
}
override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
override suspend fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
override fun playlog(@RP id: Long) = userPlaylogRepository.findById(id).getOrNull() ?: (404 - "Playlog not found")
override suspend fun playlog(@RP id: Long) = userPlaylogRepository.findById(id).getOrNull() ?: (404 - "Playlog not found")
override suspend fun recent(@RP username: Str) = us.cardByName(username) { card ->
userPlaylogRepository.findByUser_Card_ExtId(card.extId)
}
}

View File

@ -21,7 +21,7 @@ class Maimai2(
val userGeneralDataRepository: UserGeneralDataRepository
): GameApiController
{
override fun trend(@RP username: Str): List<TrendOut> = us.cardByName(username) { card ->
override suspend fun trend(@RP username: Str): List<TrendOut> = us.cardByName(username) { card ->
findTrend(userPlaylogRepository.findByUser_Card_ExtId(card.extId)
.map { TrendLog(it.playDate, it.afterRating) })
}
@ -29,7 +29,7 @@ class Maimai2(
// Only show > S rank
private val shownRanks = mai2Scores.filter { it.first >= 97 * 10000 }
override fun userSummary(@RP username: Str) = us.cardByName(username) { card ->
override suspend fun userSummary(@RP username: Str) = us.cardByName(username) { card ->
val extra = userGeneralDataRepository.findByUser_Card_ExtId(card.extId)
.associate { it.propertyKey to it.propertyValue }
@ -41,7 +41,11 @@ class Maimai2(
genericUserSummary(card, userDataRepository, userPlaylogRepository, shownRanks, ratingComposition)
}
override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
override suspend fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
override fun playlog(@RP id: Long) = userPlaylogRepository.findById(id).getOrNull() ?: (404 - "Playlog not found")
override suspend fun playlog(@RP id: Long) = userPlaylogRepository.findById(id).getOrNull() ?: (404 - "Playlog not found")
override suspend fun recent(@RP username: Str) = us.cardByName(username) { card ->
userPlaylogRepository.findByUser_Card_ExtId(card.extId)
}
}

View File

@ -46,11 +46,13 @@ data class GenericRankingPlayer(
interface GameApiController {
@API("trend")
fun trend(@RP username: String): List<TrendOut>
suspend fun trend(@RP username: String): List<TrendOut>
@API("user-summary")
fun userSummary(@RP username: String): GenericGameSummary
suspend fun userSummary(@RP username: String): GenericGameSummary
@API("ranking")
fun ranking(): List<GenericRankingPlayer>
suspend fun ranking(): List<GenericRankingPlayer>
@API("playlog")
fun playlog(@RP id: Long): IGenericGamePlaylog
suspend fun playlog(@RP id: Long): IGenericGamePlaylog
@API("recent")
suspend fun recent(@RP username: String): List<IGenericGamePlaylog>
}

View File

@ -18,14 +18,14 @@ class Ongeki(
val userDataRepository: UserDataRepository,
val userGeneralDataRepository: UserGeneralDataRepository
): GameApiController {
override fun trend(username: String) = us.cardByName(username) { card ->
override suspend fun trend(username: String) = us.cardByName(username) { card ->
findTrend(userPlaylogRepository.findByUser_Card_ExtId(card.extId)
.map { TrendLog(it.playDate, it.playerRating) })
}
private val shownRanks = ongekiScores.filter { it.first >= 950000 }
override fun userSummary(username: String) = us.cardByName(username) { card ->
override suspend fun userSummary(username: String) = us.cardByName(username) { card ->
// val extra = userGeneralDataRepository.findByUser_Card_ExtId(u.ghostCard.extId)
// .associate { it.propertyKey to it.propertyValue }
@ -34,7 +34,11 @@ class Ongeki(
genericUserSummary(card, userDataRepository, userPlaylogRepository, shownRanks, mapOf())
}
override fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
override suspend fun ranking() = genericRanking(userDataRepository, userPlaylogRepository)
override fun playlog(id: Long) = userPlaylogRepository.findById(id).getOrNull() ?: (404 - "Playlog not found")
override suspend fun playlog(id: Long) = userPlaylogRepository.findById(id).getOrNull() ?: (404 - "Playlog not found")
override suspend fun recent(username: String) = us.cardByName(username) { card ->
userPlaylogRepository.findByUser_Card_ExtId(card.extId)
}
}