diff --git a/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt b/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt index 049de170..643caafb 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt @@ -41,6 +41,55 @@ class Maimai2( genericUserSummary(card, ratingComposition) } + @API("user-rating") + suspend fun userRating(@RP username: Str) = us.cardByName(username) { card -> + val extra = repos.userGeneralData.findByUser_Card_ExtId(card.extId) + .associate { it.propertyKey to it.propertyValue } + val b35Str = extra["recent_rating"] ?: (400 - "No rating found") + val b15Str = extra["recent_rating_new"] ?: (400 - "No rating found") + + val b35 = b35Str.split(',').map { it.split(':') } + val b15 = b15Str.split(',').map { it.split(':') } + + val musicIdList = listOf( + b35.map { it[0].toInt() }, + b15.map { it[0].toInt() }, + ).flatten() + + val userMusicList = repos.userMusicDetail.findByUser_Card_ExtIdAndMusicIdIn(card.extId, musicIdList) + + // Dont leak extId + mapOf( + "best35" to b35, + "best15" to b15, + "musicList" to userMusicList, + ) + } + + @API("user-name-plate") + suspend fun userNamePlate(@RP username: Str) = us.cardByName(username) { card -> + val userData = repos.userData.findByCardExtId(card.extId).orElse(null) ?: (404 - "User not found") + mapOf( + "iconId" to userData.iconId, + "plateId" to userData.plateId, + "titleId" to userData.titleId, + "classRank" to userData.classRank, + "playerRating" to userData.playerRating, + "userName" to userData.userName, + "courseRank" to userData.courseRank, + ) + } + + @API("user-favorite") + suspend fun userFavorite(@RP username: Str) = us.cardByName(username) { card -> + repos.userFavorite.findByUser_Card_ExtId(card.extId) + } + + @API("user-music-from-list") + suspend fun userMusicFromList(@RP username: Str, @RB musicList: List) = us.cardByName(username) { card -> + repos.userMusicDetail.findByUser_Card_ExtIdAndMusicIdIn(card.extId, musicList) + } + @PostMapping("change-name") suspend fun changeName(@RP token: String, @RP newName: String) = us.jwt.auth(token) { u -> val newNameFull = toFullWidth(newName) diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt index aebf8a65..60319a59 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt @@ -94,6 +94,8 @@ interface Mai2UserMusicDetailRepo : Mai2UserLinked { fun findByUser_Card_ExtIdAndMusicId(userId: Long, id: Int): List fun findByUserAndMusicIdAndLevel(user: Mai2UserDetail, musicId: Int, level: Int): Optional + + fun findByUser_Card_ExtIdAndMusicIdIn(userId: Long, musicId: List): List } interface Mai2UserOptionRepo : Mai2UserLinked