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 068e8e01..8feaa933 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanServletController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanServletController.kt @@ -219,6 +219,47 @@ fun ChusanServletController.init() { } } + "GetUserCardPrintError" { + val lst = db.userCardPrintState.findByUser_Card_ExtIdAndHasCompleted(uid, false) + mapOf("userId" to uid, "length" to lst.size, "userCardPrintStateList" to lst) + } + + "GetUserCharacter" { + // Let's try not paging at all + val lst = db.userCharacter.findByUser_Card_ExtId(uid) + mapOf("userId" to uid, "length" to lst.size, "nextIndex" to -1, "userCharacterList" to lst) + } + + "GetUserCourse" { + val lst = db.userCourse.findByUser_Card_ExtId(uid) + mutableMapOf("userId" to uid, "length" to lst.size, "userCourseList" to lst).apply { + if (data.containsKey("nextIndex")) this["nextIndex"] = -1 + } + } + + "GetUserItem" { + val kind = parsing { (data["nextIndex"]!!.long % 10000000000L).int } + val lst = db.userItem.findAllByUser_Card_ExtIdAndItemKind(uid, kind) + mapOf("userId" to uid, "length" to lst.size, "nextIndex" to -1, "itemKind" to kind, "userItemList" to lst) + } + + "GetUserFavoriteItem" { + val kind = parsing { data["kind"]!!.int } + + // TODO: Actually store this info at UpsertUserAll + val fav = when (kind) { + 1 -> "favorite_music" + 3 -> "favorite_chara" + else -> null + }?.let { db.userGeneralData.findByUser_Card_ExtIdAndPropertyKey(uid, it)() }?.propertyValue + + val lst = fav?.let { + if (it.isNotBlank() && it.contains(",")) it.split(",").map { it.int } + else null + } ?: emptyList() + + mapOf("userId" to uid, "kind" to kind, "length" to lst.size, "nextIndex" to -1, "userFavoriteItemList" to lst) + } // Game settings "GetGameSetting" { val version = data["version"].toString() diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCardPrintErrorHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCardPrintErrorHandler.java deleted file mode 100644 index 1ae2e7a6..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCardPrintErrorHandler.java +++ /dev/null @@ -1,48 +0,0 @@ -package icu.samnyan.aqua.sega.chusan.handler; - -import com.fasterxml.jackson.core.JsonProcessingException; -import icu.samnyan.aqua.sega.chusan.model.Chu3UserCardPrintStateRepo; -import icu.samnyan.aqua.sega.general.BaseHandler; -import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState; -import icu.samnyan.aqua.sega.util.jackson.BasicMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Component("ChusanGetUserCardPrintErrorHandler") -public class GetUserCardPrintErrorHandler implements BaseHandler { - - private static final Logger logger = LoggerFactory.getLogger(GetUserCardPrintErrorHandler.class); - private final Chu3UserCardPrintStateRepo userCardPrintStateRepository; - private final BasicMapper mapper; - - @Autowired - public GetUserCardPrintErrorHandler(Chu3UserCardPrintStateRepo userCardPrintStateRepository, BasicMapper mapper) { - this.mapper = mapper; - this.userCardPrintStateRepository = userCardPrintStateRepository; - } - - @Override - public String handle(Map request) throws JsonProcessingException { - Long userId = ((Number) request.get("userId")).longValue(); - - List userCardPrintStateList = userCardPrintStateRepository.findByUser_Card_ExtIdAndHasCompleted(userId, false); - - Map resultMap = new LinkedHashMap<>(); - resultMap.put("userId", userId); - resultMap.put("length", userCardPrintStateList.size()); - resultMap.put("userCardPrintStateList", userCardPrintStateList); - - String json = mapper.write(resultMap); - logger.info("Response: " + json); - return json; - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCharacterHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCharacterHandler.java deleted file mode 100644 index 155ae81a..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCharacterHandler.java +++ /dev/null @@ -1,60 +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.UserCharacter; -import icu.samnyan.aqua.sega.chusan.service.UserCharacterService; -import icu.samnyan.aqua.sega.util.jackson.StringMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.stereotype.Component; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Handle getUserCharacter request - * @author samnyan (privateamusement@protonmail.com) - */ -@Component("ChusanGetUserCharacterHandler") -public class GetUserCharacterHandler implements BaseHandler { - - - private static final Logger logger = LoggerFactory.getLogger(GetUserCharacterHandler.class); - - private final StringMapper mapper; - - private final UserCharacterService userCharacterService; - - - @Autowired - public GetUserCharacterHandler(StringMapper mapper, UserCharacterService userCharacterService) { - this.mapper = mapper; - this.userCharacterService = userCharacterService; - } - - @Override - public String handle(Map request) throws JsonProcessingException { - String userId = (String) request.get("userId"); - int nextIndex = Integer.parseInt((String) request.get("nextIndex")); - int maxCount = Integer.parseInt((String) request.get("maxCount")); - - int pageNum = nextIndex / maxCount; - - Page dbPage = userCharacterService.getByUserId(userId, pageNum, maxCount); - - long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); - - Map resultMap = new LinkedHashMap<>(); - resultMap.put("userId", userId); - resultMap.put("length", dbPage.getNumberOfElements()); - resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex); - resultMap.put("userCharacterList", dbPage.getContent()); - - String json = mapper.write(resultMap); - logger.info("Response: " + json); - return json; - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCourseHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCourseHandler.java deleted file mode 100644 index f4a55a68..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCourseHandler.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.UserCourse; -import icu.samnyan.aqua.sega.chusan.service.UserCourseService; -import icu.samnyan.aqua.sega.util.jackson.StringMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.stereotype.Component; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * Handle GetUserCourse request - * @author samnyan (privateamusement@protonmail.com) - */ -@Component("ChusanGetUserCourseHandler") -public class GetUserCourseHandler implements BaseHandler { - - private static final Logger logger = LoggerFactory.getLogger(GetUserCourseHandler.class); - - private final StringMapper mapper; - - private final UserCourseService userCourseService; - - @Autowired - public GetUserCourseHandler(StringMapper mapper, UserCourseService userCourseService) { - this.mapper = mapper; - this.userCourseService = userCourseService; - } - - @Override - public String handle(Map request) throws JsonProcessingException { - String userId = (String) request.get("userId"); - - Map resultMap = new LinkedHashMap<>(); - resultMap.put("userId", userId); - - if(request.containsKey("nextIndex")) { - int nextIndex = Integer.parseInt((String) request.get("nextIndex")); - int maxCount = Integer.parseInt((String) request.get("maxCount")); - - int pageNum = nextIndex / maxCount; - - Page dbPage = userCourseService.getByUserId(userId, pageNum, maxCount); - - long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); - - resultMap.put("length", dbPage.getNumberOfElements()); - resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex); - resultMap.put("userCourseList", dbPage.getContent()); - } else { - List courseList = userCourseService.getByUserId(userId); - resultMap.put("length", courseList.size()); - resultMap.put("userCourseList", courseList); - } - - String json = mapper.write(resultMap); - logger.info("Response: " + json); - return json; - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserFavoriteItemHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserFavoriteItemHandler.java deleted file mode 100644 index 5a0a7700..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserFavoriteItemHandler.java +++ /dev/null @@ -1,85 +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.response.data.UserFavorite; -import icu.samnyan.aqua.sega.chusan.model.userdata.UserGeneralData; -import icu.samnyan.aqua.sega.chusan.service.UserGeneralDataService; -import icu.samnyan.aqua.sega.util.jackson.StringMapper; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.*; - -@Component("ChusanGetUserFavoriteItemHandler") -public class GetUserFavoriteItemHandler implements BaseHandler { - - private static final Logger logger = LoggerFactory.getLogger(GetUserFavoriteItemHandler.class); - - private final StringMapper mapper; - - private final UserGeneralDataService userGeneralDataService; - - @Autowired - public GetUserFavoriteItemHandler(StringMapper mapper, UserGeneralDataService userGeneralDataService) { - this.mapper = mapper; - this.userGeneralDataService = userGeneralDataService; - } - - @Override - public String handle(Map request) throws JsonProcessingException { - String userId = (String) request.get("userId"); - int kind = Integer.parseInt((String) request.get("kind")); - Long nextIndexVal = Long.parseLong((String) request.get("nextIndex")); - int maxCount = Integer.parseInt((String) request.get("maxCount")); // Fixed to 50? - - List userFavorites = new LinkedList<>(); - Optional favOptional; - - switch (kind) { - case 1: // Music - favOptional = userGeneralDataService.getByUserIdAndKey(userId, "favorite_music"); - break; - - case 3: // Chara - favOptional = userGeneralDataService.getByUserIdAndKey(userId, "favorite_chara"); - break; - - default: - favOptional = Optional.empty(); - break; - } - - // Let's assume data is in following format: - // 1111,2222,3333,4444 ... - if(favOptional.isPresent()) { - String val = favOptional.get().getPropertyValue(); - if(StringUtils.isNotBlank(val) && val.contains(",")) { - String[] records = val.split(","); - for (String record : records) { - userFavorites.add(new UserFavorite(Integer.parseInt(record))); - } - } - } - - // While client seems capable to handle more than 50 items, let's limit it to 50 - // Reasons: 1. VARCHAR is limited to 255 chars (theoretically <= 51 entries), 2. Multiple pagination is troublesome - if (userFavorites.size() > 50) { - userFavorites = userFavorites.subList(0, 50); - } - - Map resultMap = new LinkedHashMap<>(); - resultMap.put("userId", userId); - resultMap.put("kind", kind); - resultMap.put("length", userFavorites.size()); - resultMap.put("nextIndex", -1); - resultMap.put("userFavoriteItemList", userFavorites); - - String json = mapper.write(resultMap); - logger.info("Response: " + json); - return json; - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserGachaHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserGachaHandler.java deleted file mode 100644 index 168cc885..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserGachaHandler.java +++ /dev/null @@ -1,50 +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.UserGacha; -import icu.samnyan.aqua.sega.chusan.service.UserGachaService; -import icu.samnyan.aqua.sega.util.jackson.BasicMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Component("ChusanGetUserGachaHandler") -public class GetUserGachaHandler implements BaseHandler { - - private static final Logger logger = LoggerFactory.getLogger(GetUserGachaHandler.class); - - private final BasicMapper mapper; - - private final UserGachaService userGachaService; - - @Autowired - public GetUserGachaHandler(BasicMapper mapper, UserGachaService userGachaService) { - this.mapper = mapper; - this.userGachaService = userGachaService; - } - - @Override - public String handle(Map request) throws JsonProcessingException { - String userId = String.valueOf(request.get("userId")); - - List userGachaList = userGachaService.getByUserId(userId); - - Map resultMap = new LinkedHashMap<>(); - resultMap.put("userId", userId); - resultMap.put("length", userGachaList.size()); - resultMap.put("userGachaList", userGachaList); - - String json = mapper.write(resultMap); - logger.info("Response: " + json); - return json; - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserItemHandler.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserItemHandler.kt deleted file mode 100644 index 73867278..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserItemHandler.kt +++ /dev/null @@ -1,55 +0,0 @@ -package icu.samnyan.aqua.sega.chusan.handler - -import com.fasterxml.jackson.core.JsonProcessingException -import ext.int -import ext.long -import icu.samnyan.aqua.sega.chusan.service.UserItemService -import icu.samnyan.aqua.sega.general.BaseHandler -import icu.samnyan.aqua.sega.util.jackson.StringMapper -import org.slf4j.Logger -import org.slf4j.LoggerFactory -import org.springframework.stereotype.Component - -/** - * Handler for getting user item. - * This get call before profile create. - * - * @author samnyan (privateamusement@protonmail.com) - */ -@Component("ChusanGetUserItemHandler") -class GetUserItemHandler(private val mapper: StringMapper, private val userItemService: UserItemService) : BaseHandler { - @Throws(JsonProcessingException::class) - override fun handle(request: Map): String { - val userId = request["userId"].toString() - val nextIndexVal = request["nextIndex"]?.long() ?: 0 - val maxCount = request["maxCount"]?.int() ?: 100 - - val mul = 10000000000L - - val kind = (nextIndexVal / mul).toInt() - val nextIndex = (nextIndexVal % mul).toInt() - val pageNum = nextIndex / maxCount - - val userItemPage = userItemService.getByUserAndItemKind(userId, kind, pageNum, maxCount) - val userItemList = userItemPage.content - val currentIndex = kind * mul + maxCount * pageNum + userItemPage.numberOfElements - - // TODO: Music unlock - - val resultMap = mapOf( - "userId" to userId, - "length" to userItemPage.numberOfElements, - "nextIndex" to if (userItemPage.numberOfElements < maxCount) -1 else currentIndex, - "itemKind" to kind, - "userItemList" to userItemList - ) - - val json = mapper.write(resultMap) - logger.info("Response: $json") - return json - } - - companion object { - private val logger: Logger = LoggerFactory.getLogger(GetUserItemHandler::class.java) - } -}