[O] Merge more apis

pull/108/head
Azalea 2025-01-11 21:15:16 -05:00
parent c5b40f64e4
commit 64827ec0fc
6 changed files with 38 additions and 137 deletions

View File

@ -2,6 +2,9 @@ package icu.samnyan.aqua.sega.maimai2
import ext.*
import icu.samnyan.aqua.sega.general.PagedHandler
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRivalMusic
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRivalMusicDetail
import java.util.*
fun Maimai2ServletController.initApis() {
// Used because maimai does not actually require paging implementation
@ -72,6 +75,13 @@ fun Maimai2ServletController.initApis() {
) }
"CreateToken" static { """{"Bearer":"meow"}""" }
"UserLogin" static { mapOf(
"returnCode" to 1, "loginCount" to 1,
"lastLoginDate" to "2020-01-01 00:00:00.0",
"consecutiveLoginCount" to 0, "loginId" to 1,
"Bearer" to "meow", "bearer" to "meow"
) }
"CMUpsertUserPrintlog" static { """{"returnCode":1,"orderId":"0","serialId":"FAKECARDIMAG12345678"}""" }
"CMGetSellingCard" static { db.gameSellingCard.findAll().let {
@ -138,6 +148,29 @@ fun Maimai2ServletController.initApis() {
)
}
"GetUserRivalData" {
val rivalId = parsing { data["rivalId"]!!.long }
mapOf("userId" to uid, "userRivalData" to mapOf(
"rivalId" to rivalId,
"rivalName" to (db.userData.findByCardExtId(rivalId)()?.userName ?: "")
))
}
"GetUserRivalMusic" {
val rivalId = parsing { data["rivalId"]!!.long }
val lst = db.userMusicDetail.findByUserId(rivalId)
val res = lst.associate { it.musicId to UserRivalMusic(it.musicId, LinkedList()) }
lst.forEach {
res[it.musicId]!!.userRivalMusicDetailList.add(
UserRivalMusicDetail(it.level, it.achievement, it.deluxscoreMax)
)
}
mapOf("userId" to uid, "rivalId" to rivalId, "nextIndex" to 0, "userRivalMusicList" to res.values)
}
// Empty List Handlers
"GetUserRecommendRateMusic" { mapOf(
"uid" to uid,

View File

@ -21,7 +21,6 @@ import kotlin.reflect.full.declaredMemberProperties
@RestController
@RequestMapping(path = ["/g/mai2/Maimai2Servlet/", "/g/mai2/"])
class Maimai2ServletController(
val userLogin: UserLoginHandler,
val upsertUserAll: UpsertUserAllHandler,
val getUserItem: GetUserItemHandler,
val getUserRating: GetUserRatingHandler,
@ -31,7 +30,6 @@ class Maimai2ServletController(
val uploadUserPortrait: UploadUserPortraitHandler,
val upsertUserPrint: UpsertUserPrintHandler,
val getUserFavoriteItem: GetUserFavoriteItemHandler,
val getUserRivalMusic: GetUserRivalMusicHandler,
val getUserCharacter: GetUserCharacterHandler,
val getGameRanking: GetGameRankingHandler,
val db: Mai2Repos
@ -47,21 +45,17 @@ class Maimai2ServletController(
init { initApis() }
val endpointList = setOf("GetGameRankingApi","GetUserCharacterApi","GetUserItemApi","GetUserPortraitApi",
"GetUserRatingApi","UploadUserPhotoApi","UploadUserPlaylogApi","UploadUserPortraitApi","UserLoginApi",
"UserLogoutApi","UpsertUserAllApi","CMGetUserCardApi","CMGetUserCardPrintErrorApi","CMGetUserDataApi",
"CMGetUserItemApi","CMUpsertUserPrintApi","GetUserFavoriteItemApi","GetUserRivalMusicApi","GetUserScoreRankingApi",
"UpsertClientBookkeepingApi","UpsertClientSettingApi","UpsertClientTestmodeApi","UpsertClientUploadApi",
"Ping","RemoveTokenApi","CMLoginApi","CMLogoutApi","CMUpsertBuyCardApi").mut.also {
println(it.filter { it !in initH.keys }.toJson())
}
"GetUserRatingApi","UploadUserPhotoApi","UploadUserPlaylogApi","UploadUserPortraitApi","UpsertUserAllApi",
"CMGetUserCardApi","CMGetUserCardPrintErrorApi","CMGetUserDataApi","CMGetUserItemApi","CMUpsertUserPrintApi",
"GetUserFavoriteItemApi")
val noopEndpoint = setOf("GetUserScoreRankingApi", "UpsertClientBookkeepingApi",
"UpsertClientSettingApi", "UpsertClientTestmodeApi", "UpsertClientUploadApi", "Ping", "RemoveTokenApi",
"CMLoginApi", "CMLogoutApi", "CMUpsertBuyCardApi", "UserLogoutApi", "GetGameMapAreaConditionApi",
"UpsertUserChargelogApi").also { endpointList.removeAll(it) }
"UpsertUserChargelogApi")
val members = this::class.declaredMemberProperties
val handlers: Map<String, SpecialHandler> = endpointList.associateWith { api ->
val handlers: Map<String, SpecialHandler> = initH + endpointList.associateWith { api ->
val name = api.replace("Api", "").lowercase()
(members.find { it.name.lowercase() == name } ?: members.find { it.name.lowercase() == name.replace("cm", "") })
?.let { (it.call(this) as BaseHandler).toSpecial() }

View File

@ -1,24 +0,0 @@
package icu.samnyan.aqua.sega.maimai2.handler
import ext.invoke
import icu.samnyan.aqua.sega.general.BaseHandler
import icu.samnyan.aqua.sega.maimai2.model.Mai2Repos
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
@Component("Maimai2GetUserRivalDataHandler")
class GetUserRivalDataHandler(val repos: Mai2Repos) : BaseHandler {
override fun handle(request: Map<String, Any>): Any {
val userId = (request["userId"] as Number).toLong()
val rivalId = (request["rivalId"] as Number).toLong()
return mapOf(
"userId" to userId,
"userRivalData" to mapOf(
"rivalId" to rivalId,
"rivalName" to (repos.userData.findByCardExtId(rivalId)()?.userName ?: "")
)
)
}
}

View File

@ -1,66 +0,0 @@
package icu.samnyan.aqua.sega.maimai2.handler;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import icu.samnyan.aqua.sega.general.BaseHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.model.Mai2UserMusicDetailRepo;
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRivalMusic;
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRivalMusicDetail;
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMusicDetail;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
@Component("Maimai2GetUserRivalMusicHandler")
public class GetUserRivalMusicHandler implements BaseHandler {
private static final Logger logger = LoggerFactory
.getLogger(GetUserRivalMusicHandler.class);
private final StringMapper mapper;
private final Mai2UserMusicDetailRepo userMusicDetailRepository;
@Autowired
public GetUserRivalMusicHandler(StringMapper mapper, Mai2UserMusicDetailRepo userMusicDetailRepository) {
this.mapper = mapper;
this.userMusicDetailRepository = userMusicDetailRepository;
}
public String handle(Map<String, ?> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
long rivalId = ((Number) request.get("rivalId")).intValue();
List<Mai2UserMusicDetail> details = userMusicDetailRepository.findByUserId(rivalId);
List<UserRivalMusic> userRivalMusicList = new LinkedList<>();
Map<Integer, UserRivalMusic> userRivalMusicMap = new HashMap<>();
for (Mai2UserMusicDetail detail : details) {
int musicId = detail.getMusicId();
UserRivalMusic info = userRivalMusicMap.getOrDefault(musicId, null);
if (info == null) {
info = new UserRivalMusic(musicId, new LinkedList<>());
userRivalMusicList.add(info);
userRivalMusicMap.put(musicId, info);
}
info.getUserRivalMusicDetailList().add(
new UserRivalMusicDetail(detail.getLevel(), detail.getAchievement(), detail.getDeluxscoreMax())
);
}
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("rivalId", rivalId);
resultMap.put("nextIndex", 0);
resultMap.put("userRivalMusicList", userRivalMusicList);
return mapper.write(resultMap);
}
}

View File

@ -1,23 +0,0 @@
package icu.samnyan.aqua.sega.maimai2.handler
import icu.samnyan.aqua.sega.general.BaseHandler
import icu.samnyan.aqua.sega.util.jackson.BasicMapper
import org.springframework.stereotype.Component
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("Maimai2UserLoginHandler")
class UserLoginHandler(mapper: BasicMapper) : BaseHandler {
val resp = mapper.write(mapOf(
"returnCode" to 1,
"lastLoginDate" to "2020-01-01 00:00:00.0",
"loginCount" to 1,
"consecutiveLoginCount" to 0,
"loginId" to 1,
"Bearer" to "meow", // Isn't actually used by the game
"bearer" to "meow"
))
override fun handle(request: Map<String, Any>) = resp
}

View File

@ -1,13 +0,0 @@
package icu.samnyan.aqua.sega.maimai2.handler
import ext.parsing
import icu.samnyan.aqua.sega.general.BaseHandler
fun interface UserReqHandler : BaseHandler {
override fun handle(request: Map<String, Any>): Any {
val userId = parsing { (request["userId"] as Number).toLong() }
return handleThis(request, userId)
}
fun handleThis(request: Map<String, Any>, userId: Long): Any
}