diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt index fa69d3e9..f69cdc9d 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/Maimai2ServletController.kt @@ -30,6 +30,7 @@ class Maimai2ServletController( val upsertUserPrint: UpsertUserPrintHandler, val getUserFavoriteItem: GetUserFavoriteItemHandler, val getUserRivalMusic: GetUserRivalMusicHandler, + val getUserCharacter: GetUserCharacterHandler, val repos: Mai2Repos ) { companion object { @@ -74,11 +75,6 @@ class Maimai2ServletController( "userCardList" to repos.userCard.findByUser_Card_ExtId(userId) ) } - val getUserCharacter = UserReqHandler { _, userId -> mapOf( - "userId" to userId, - "userCharacterList" to repos.userCharacter.findByUser_Card_ExtId(userId) - ) } - val getUserCharge = UserReqHandler { _, userId -> repos.userCharge.findByUser_Card_ExtId(userId).let { mapOf( "userId" to userId, "length" to it.size, diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/GetUserCharacterHandler.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/GetUserCharacterHandler.kt new file mode 100644 index 00000000..a8fd9241 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/GetUserCharacterHandler.kt @@ -0,0 +1,53 @@ +package icu.samnyan.aqua.sega.maimai2.handler + +import icu.samnyan.aqua.net.games.mai2.Maimai2 +import icu.samnyan.aqua.sega.general.BaseHandler +import icu.samnyan.aqua.sega.general.dao.CardRepository +import icu.samnyan.aqua.sega.maimai2.model.Mai2Repos +import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2ItemKind +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.stereotype.Component +import kotlin.jvm.optionals.getOrNull + +@Component("Maimai2GetUserCharacterHandler") +class GetUserCharacterHandler( + val repos: Mai2Repos, + val maimai2: Maimai2, + val cardRepo: CardRepository, +) : BaseHandler { + val itemUnlock = maimai2.itemMapping[Mai2ItemKind.chara.name]?.map { mapOf( + "characterId" to it.key, + "level" to 9999, + "awakening" to 1, + "useCount" to 0 + ) } + + init { + if (itemUnlock.isNullOrEmpty()) logger.warn("Mai2 item info is empty") + } + + override fun handle(request: Map): Any { + val userId = (request["userId"] as Number).toLong() + + // Aqua Net game unlock feature + cardRepo.findByExtId(userId).getOrNull()?.aquaUser?.gameOptions?.let { opt -> + if (!opt.unlockChara or itemUnlock.isNullOrEmpty()) return@let + + logger.info("Response: ${itemUnlock!!.size} Characters - All unlock") + return mapOf( + "userId" to userId, + "userCharacterList" to itemUnlock + ) + } + + return mapOf( + "userId" to userId, + "userCharacterList" to repos.userCharacter.findByUser_Card_ExtId(userId) + ) + } + + companion object { + val logger: Logger = LoggerFactory.getLogger(GetUserCharacterHandler::class.java) + } +}