diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanServletController.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanServletController.kt index 897b64dd..d95e09d6 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanServletController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanServletController.kt @@ -13,6 +13,7 @@ import icu.samnyan.aqua.sega.chusan.model.userdata.UserCharge import icu.samnyan.aqua.sega.general.BaseHandler import icu.samnyan.aqua.sega.general.RequestContext import icu.samnyan.aqua.sega.general.SpecialHandler +import icu.samnyan.aqua.sega.general.model.response.UserRecentRating import icu.samnyan.aqua.sega.general.toSpecial import icu.samnyan.aqua.sega.util.jackson.StringMapper import icu.samnyan.aqua.spring.Metrics @@ -50,7 +51,7 @@ class ChusanServletController( // Below are code related to handling the handlers val externalHandlers = mutableListOf( - "GameLoginApi", "GetUserMusicApi", "GetUserRecentRatingApi", "UpsertUserAllApi", + "GameLoginApi", "GetUserMusicApi", "UpsertUserAllApi", "CMGetUserCharacterApi", "CMUpsertUserGachaApi", "CMUpsertUserPrintCancelApi", "CMUpsertUserPrintSubtractApi") @@ -269,6 +270,16 @@ fun ChusanServletController.init() { mapOf("userId" to uid, "length" to lst.size, "userLoginBonusList" to lst) } + "GetUserRecentRating" { + val lst = db.userGeneralData.findByUser_Card_ExtIdAndPropertyKey(uid, "recent_rating_list")() + ?.propertyValue?.ifBlank { null } + ?.split(',')?.dropLastWhile { it.isEmpty() }?.map { it.split(':') } + ?.map { (musicId, level, ver, score) -> UserRecentRating(musicId.int, level.int, ver, score.int) } + ?: listOf() + + mapOf("userId" to uid, "length" to lst.size, "userRecentRatingList" to lst) + } + "GetUserMapArea" { val maps = parsing { data["mapAreaIdList"] as List> } .mapNotNull { it["mapAreaId"]?.toIntOrNull() } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserRecentRatingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserRecentRatingHandler.java deleted file mode 100644 index a98af5d0..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserRecentRatingHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -package icu.samnyan.aqua.sega.chusan.handler; - -import com.fasterxml.jackson.core.JsonProcessingException; -import icu.samnyan.aqua.sega.general.BaseHandler; -import icu.samnyan.aqua.sega.chusan.model.userdata.UserGeneralData; -import icu.samnyan.aqua.sega.chusan.model.userdata.UserPlaylog; -import icu.samnyan.aqua.sega.chusan.service.UserGeneralDataService; -import icu.samnyan.aqua.sega.chusan.service.UserPlaylogService; -import icu.samnyan.aqua.sega.general.model.response.UserRecentRating; -import icu.samnyan.aqua.sega.util.jackson.StringMapper; -import lombok.AllArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * Return the recent play to calculate rating. Rating base on top 30 songs plus top 10 in recent 30 plays. - * - * @author samnyan (privateamusement@protonmail.com) - */ -@AllArgsConstructor -@Component("ChusanGetUserRecentRatingHandler") -public class GetUserRecentRatingHandler implements BaseHandler { - private final UserPlaylogService userPlaylogService; - private final UserGeneralDataService userGeneralDataService; - - @Override - public Object handle(Map request) throws JsonProcessingException { - String userId = (String) request.get("userId"); - - Optional recentOptional = userGeneralDataService.getByUserIdAndKey(userId, "recent_rating_list"); - - List ratingList; - if(recentOptional.isPresent()) { - ratingList = new LinkedList<>(); - String val = recentOptional.get().getPropertyValue(); - if(StringUtils.isNotBlank(val) && val.contains(",")) { - String[] records = val.split(","); - for (String record : - records) { - String[] value = record.split(":"); - ratingList.add(new UserRecentRating( - Integer.parseInt(value[0]), - Integer.parseInt(value[1]), - "2000001", - Integer.parseInt(value[2]) - )); - } - } - } else { - List top = userPlaylogService.getRecent30Plays(userId); - ratingList = top.stream().map(log -> new UserRecentRating(log.getMusicId(), log.getLevel(), "2000001", log.getScore())) - .collect(Collectors.toList()); - } - - Map resultMap = new LinkedHashMap<>(); - resultMap.put("userId", userId); - resultMap.put("length", ratingList.size()); - resultMap.put("userRecentRatingList", ratingList); - - return resultMap; - } -}