From a4bbc9c3c6e7d79e4610a9668064a15b84722773 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:46:22 -0500 Subject: [PATCH] [+] Recent endpoint --- src/main/java/icu/samnyan/aqua/net/db/AquaNetUser.kt | 9 +++++---- src/main/java/icu/samnyan/aqua/net/games/Chusan.kt | 12 ++++++++---- src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt | 12 ++++++++---- src/main/java/icu/samnyan/aqua/net/games/Models.kt | 10 ++++++---- src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt | 12 ++++++++---- 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/main/java/icu/samnyan/aqua/net/db/AquaNetUser.kt b/src/main/java/icu/samnyan/aqua/net/db/AquaNetUser.kt index 4500e74e..525d6f09 100644 --- a/src/main/java/icu/samnyan/aqua/net/db/AquaNetUser.kt +++ b/src/main/java/icu/samnyan/aqua/net/db/AquaNetUser.kt @@ -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 byName(username: Str, callback: (AquaNetUser) -> T) = - userRepo.findByUsernameIgnoreCase(username)?.let(callback) ?: (404 - "User not found") + suspend fun byName(username: Str, callback: suspend (AquaNetUser) -> T) = + async { userRepo.findByUsernameIgnoreCase(username) }?.let { callback(it) } ?: (404 - "User not found") - fun cardByName(username: Str, callback: (Card) -> T) = + suspend fun 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 { 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 a7f1e851..edd1e627 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt @@ -21,7 +21,7 @@ class Chusan( val userGeneralDataRepository: UserGeneralDataRepository ): GameApiController { - override fun trend(@RP username: Str): List = us.cardByName(username) { card -> + override suspend fun trend(@RP username: Str): List = 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) + } } \ 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 21e0969f..6a02ecd5 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Maimai2.kt @@ -21,7 +21,7 @@ class Maimai2( val userGeneralDataRepository: UserGeneralDataRepository ): GameApiController { - override fun trend(@RP username: Str): List = us.cardByName(username) { card -> + override suspend fun trend(@RP username: Str): List = 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) + } } \ 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 9a75d472..9532309b 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Models.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Models.kt @@ -46,11 +46,13 @@ data class GenericRankingPlayer( interface GameApiController { @API("trend") - fun trend(@RP username: String): List + suspend fun trend(@RP username: String): List @API("user-summary") - fun userSummary(@RP username: String): GenericGameSummary + suspend fun userSummary(@RP username: String): GenericGameSummary @API("ranking") - fun ranking(): List + suspend fun ranking(): List @API("playlog") - fun playlog(@RP id: Long): IGenericGamePlaylog + suspend fun playlog(@RP id: Long): IGenericGamePlaylog + @API("recent") + suspend fun recent(@RP username: String): 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 828c362b..f8d6753a 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt @@ -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) + } } \ No newline at end of file