diff --git a/pom.xml b/pom.xml index c2440f0f..53bbd586 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ icu.samnya aqua - 0.0.16-RELEASE + 0.0.17-RELEASE Aqua Server A multipurpose game server diff --git a/src/main/java/icu/samnyan/aqua/AquaBeanNameGenerator.java b/src/main/java/icu/samnyan/aqua/AquaBeanNameGenerator.java new file mode 100644 index 00000000..50228970 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/AquaBeanNameGenerator.java @@ -0,0 +1,14 @@ +package icu.samnyan.aqua; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanNameGenerator; + +public class AquaBeanNameGenerator implements BeanNameGenerator { + + @Override + public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { + return definition.getBeanClassName(); + } + +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/AquaServerApplication.java b/src/main/java/icu/samnyan/aqua/AquaServerApplication.java index 804cf45e..edee56db 100644 --- a/src/main/java/icu/samnyan/aqua/AquaServerApplication.java +++ b/src/main/java/icu/samnyan/aqua/AquaServerApplication.java @@ -4,13 +4,17 @@ import icu.samnyan.aqua.sega.aimedb.AimeDbServer; import icu.samnyan.aqua.spring.util.AutoChecker; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ConfigurableApplicationContext; -@SpringBootApplication +@SpringBootApplication() public class AquaServerApplication { public static void main(String[] args) throws Exception { - ConfigurableApplicationContext ctx = SpringApplication.run(AquaServerApplication.class, args); + final SpringApplicationBuilder builder = new SpringApplicationBuilder(AquaServerApplication.class); + builder.beanNameGenerator(new AquaBeanNameGenerator()); + + ConfigurableApplicationContext ctx = builder.run(args); final AimeDbServer aimeDbServer = ctx.getBean(AimeDbServer.class); aimeDbServer.start(); diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java b/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java index 8712efe2..4cd3c00e 100644 --- a/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java @@ -126,7 +126,10 @@ public class AllNetController { case "SDDT": return "http://" + HOST + ":" + PORT + "/OngekiServlet/"; case "SDEY": - return "http://" + HOST + ":" + PORT + "/"; + return "http://" + HOST + ":" + PORT + "/MaimaiServlet/"; + case "SDEZ": + // This leads to http://HOST+PORT/Maimai2Servlet/ + return HOST + ":" + PORT + "/"; default: return "http://" + HOST + ":" + PORT + "/"; } diff --git a/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.java b/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.java index 2ae2255c..07f19c43 100644 --- a/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.java +++ b/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.java @@ -28,6 +28,7 @@ public class CompressionFilter extends OncePerRequestFilter { filterList.add("/ChuniServlet"); filterList.add("/OngekiServlet"); filterList.add("/MaimaiServlet"); + filterList.add("/Maimai2Servlet"); } @Override diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/controller/Maimai2ServletController.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/controller/Maimai2ServletController.java new file mode 100644 index 00000000..3bc316e4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/controller/Maimai2ServletController.java @@ -0,0 +1,245 @@ +package icu.samnyan.aqua.sega.maimai2.controller; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.maimai2.handler.impl.*; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestController +@RequestMapping("Maimai2Servlet") +public class Maimai2ServletController { + + private final GetGameSettingHandler getGameSettingHandler; + private final GetGameEventHandler getGameEventHandler; + private final GetGameRankingHandler getGameRankingHandler; + private final GetGameTournamentInfoHandler getGameTournamentInfoHandler; + private final GetTransferFriendHandler getTransferFriendHandler; + private final GetUserActivityHandler getUserActivityHandler; + private final UserLoginHandler userLoginHandler; + private final UserLogoutHandler userLogoutHandler; + private final GetUserDataHandler getUserDataHandler; + private final UpsertUserAllHandler upsertUserAllHandler; + private final GetUserPreviewHandler getUserPreviewHandler; + private final GetUserCharacterHandler getUserCharacterHandler; + private final GetUserOptionHandler getUserOptionHandler; + private final GetUserItemHandler getUserItemHandler; + private final GetUserExtendHandler getUserExtendHandler; + private final GetUserGhostHandler getUserGhostHandler; + private final GetUserLoginBonusHandler getUserLoginBonusHandler; + private final GetUserMapHandler getUserMapHandler; + private final GetUserFavoriteHandler getUserFavoriteHandler; + private final GetUserCardHandler getUserCardHandler; + private final GetUserMusicHandler getUserMusicHandler; + private final GetUserRatingHandler getUserRatingHandler; + private final GetUserRegionHandler getUserRegionHandler; + + public Maimai2ServletController(GetGameSettingHandler getGameSettingHandler, GetGameEventHandler getGameEventHandler, GetGameRankingHandler getGameRankingHandler, GetGameTournamentInfoHandler getGameTournamentInfoHandler, + GetTransferFriendHandler getTransferFriendHandler, GetUserActivityHandler getUserActivityHandler, UserLoginHandler userLoginHandler, UserLogoutHandler userLogoutHandler, + GetUserDataHandler getUserDataHandler, UpsertUserAllHandler upsertUserAllHandler, GetUserPreviewHandler getUserPreviewHandler, GetUserCharacterHandler getUserCharacterHandler, + GetUserOptionHandler getUserOptionHandler, GetUserItemHandler getUserItemHandler, GetUserExtendHandler getUserExtendHandler, GetUserGhostHandler getUserGhostHandler, + GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMapHandler getUserMapHandler, GetUserFavoriteHandler getUserFavoriteHandler, + GetUserCardHandler getUserCardHandler, GetUserMusicHandler getUserMusicHandler, GetUserRatingHandler getUserRatingHandler, GetUserRegionHandler getUserRegionHandler) { + this.getGameSettingHandler = getGameSettingHandler; + this.getGameEventHandler = getGameEventHandler; + this.getGameRankingHandler = getGameRankingHandler; + this.getGameTournamentInfoHandler = getGameTournamentInfoHandler; + this.getTransferFriendHandler = getTransferFriendHandler; + this.getUserActivityHandler = getUserActivityHandler; + this.userLoginHandler = userLoginHandler; + this.userLogoutHandler = userLogoutHandler; + this.getUserDataHandler = getUserDataHandler; + this.upsertUserAllHandler = upsertUserAllHandler; + this.getUserPreviewHandler = getUserPreviewHandler; + this.getUserCharacterHandler = getUserCharacterHandler; + this.getUserOptionHandler = getUserOptionHandler; + this.getUserItemHandler = getUserItemHandler; + this.getUserExtendHandler = getUserExtendHandler; + this.getUserGhostHandler = getUserGhostHandler; + this.getUserLoginBonusHandler = getUserLoginBonusHandler; + this.getUserMapHandler = getUserMapHandler; + this.getUserFavoriteHandler = getUserFavoriteHandler; + this.getUserCardHandler = getUserCardHandler; + this.getUserMusicHandler = getUserMusicHandler; + this.getUserRatingHandler = getUserRatingHandler; + this.getUserRegionHandler = getUserRegionHandler; + } + + // Mandatory for boot + @PostMapping("GetGameEventApi") + public String getGameEvent(@ModelAttribute Map request) throws JsonProcessingException { + return getGameEventHandler.handle(request); + } + + @PostMapping("GetGameRankingApi") + public String getGameRanking(@ModelAttribute Map request) throws JsonProcessingException { + return getGameRankingHandler.handle(request); + } + + @PostMapping("GetGameSettingApi") + public String getGameSetting(@ModelAttribute Map request) throws JsonProcessingException { + return getGameSettingHandler.handle(request); + } + + @PostMapping("GetGameTournamentInfoApi") + public String getGameTournamentInfoHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getGameTournamentInfoHandler.handle(request); + } + + // Gameplay + @PostMapping("GetTransferFriendApi") + public String getTransferFriendHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getTransferFriendHandler.handle(request); + } + + @PostMapping("GetUserActivityApi") + public String getUserActivityHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserActivityHandler.handle(request); + } + + // maybe releated DX Pass? return empty + @PostMapping("GetUserCardApi") + public String getUserCardHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserCardHandler.handle(request); + } + + @PostMapping("GetUserCharacterApi") + public String getUserCharacterHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserCharacterHandler.handle(request); + } + + @PostMapping("GetUserDataApi") + public String getUserDataHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserDataHandler.handle(request); + } + + @PostMapping("GetUserExtendApi") + public String getUserExtendHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserExtendHandler.handle(request); + } + + @PostMapping("GetUserFavoriteApi") + public String getUserFavoriteHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserFavoriteHandler.handle(request); + } + + // No support, return empty + @PostMapping("GetUserGhostApi") + public String getUserGhostHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserGhostHandler.handle(request); + } + + @PostMapping("GetUserItemApi") + public String getUserItemHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserItemHandler.handle(request); + } + + @PostMapping("GetUserLoginBonusApi") + public String getUserLoginBonusHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserLoginBonusHandler.handle(request); + } + + @PostMapping("GetUserMapApi") + public String getUserMapHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserMapHandler.handle(request); + } + + @PostMapping("GetUserMusicApi") + public String getUserMusicHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserMusicHandler.handle(request); + } + + @PostMapping("GetUserOptionApi") + public String getUserOptionHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserOptionHandler.handle(request); + } + + // No support + @PostMapping("GetUserPortraitApi") + public String getUserPortraitHandler(@ModelAttribute Map request) throws JsonProcessingException { + return "{\"length\":0,\"userPortraitList\":[]}"; + } + + @PostMapping("GetUserPreviewApi") + public String getUserPreviewHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserPreviewHandler.handle(request); + } + + @PostMapping("GetUserRatingApi") + public String getUserRatingHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserRatingHandler.handle(request); + } + + // I don't know what it is. return empty + @PostMapping("GetUserRegionApi") + public String getUserRegionHandler(@ModelAttribute Map request) throws JsonProcessingException { + return getUserRegionHandler.handle(request); + } + + // Seems only used for tournament, No Support + @PostMapping("GetUserScoreRankingApi") + public String getUserScoreRankingHandler(@ModelAttribute Map request) throws JsonProcessingException { + return "{}"; + } + + // No support + @PostMapping("UploadUserPhotoApi") + public String uploadUserPhotoHandler(@ModelAttribute Map request) throws JsonProcessingException { + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UploadUserPhotoApi\"}"; + } + + @PostMapping("UploadUserPlaylogApi") + public String uploadUserPlaylogHandler(@ModelAttribute Map request) throws JsonProcessingException { + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UploadUserPlaylogApi\"}"; + } + + // No support, return error code + @PostMapping("UploadUserPortraitApi") + public String uploadUserPortraitHandler(@ModelAttribute Map request) throws JsonProcessingException { + return "{\"returnCode\":-1,\"apiName\":\"com.sega.maimai2servlet.api.UploadUserPortraitApi\"}"; + } + + @PostMapping("UserLoginApi") + public String userLoginHandler(@ModelAttribute Map request) throws JsonProcessingException { + return userLoginHandler.handle(request); + } + + @PostMapping("UserLogoutApi") + public String userLogoutHandler(@ModelAttribute Map request) throws JsonProcessingException { + return userLogoutHandler.handle(request); + } + + @PostMapping("UpsertClientBookkeepingApi") + public String upsertClientBookkeeping(@ModelAttribute Map request) { + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientBookkeepingApi\"}"; + } + + @PostMapping("UpsertClientSettingApi") + public String upsertClientSetting(@ModelAttribute Map request) { + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientSettingApi\"}"; + } + + @PostMapping("UpsertClientTestmodeApi") + public String upsertClientTestmode(@ModelAttribute Map request) { + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientTestmodeApi\"}"; + } + + @PostMapping("UpsertClientUploadApi") + public String upsertClientUpload(@ModelAttribute Map request) { + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientUploadApi\"}"; + } + + // Score saving + @PostMapping("UpsertUserAllApi") + public String upsertUserAllHandler(@ModelAttribute Map request) throws JsonProcessingException { + return upsertUserAllHandler.handle(request); + } + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/controller/Maimai2ServletControllerAdvice.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/controller/Maimai2ServletControllerAdvice.java new file mode 100644 index 00000000..558b3c92 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/controller/Maimai2ServletControllerAdvice.java @@ -0,0 +1,38 @@ +package icu.samnyan.aqua.sega.maimai2.controller; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@RestControllerAdvice(basePackages = "icu.samnyan.aqua.sega.maimai2") +public class Maimai2ServletControllerAdvice { + + private static final Logger logger = LoggerFactory.getLogger(Maimai2ServletControllerAdvice.class); + + /** + * Get the map object from json string + * + * @param request HttpServletRequest + */ + @ModelAttribute + public Map preHandle(HttpServletRequest request) throws IOException { + byte[] src = request.getInputStream().readAllBytes(); + String outputString = new String(src, StandardCharsets.UTF_8).trim(); + logger.info("Request {} : {}", request.getRequestURI(), outputString); + ObjectMapper mapper = new ObjectMapper(); + + return mapper.readValue(outputString, new TypeReference<>() { + }); + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/MapEncountNpcRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/MapEncountNpcRepository.java new file mode 100644 index 00000000..6974f0eb --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/MapEncountNpcRepository.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.MapEncountNpc; + +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2MapEncountNpcRepository") +public interface MapEncountNpcRepository extends JpaRepository { + + Optional findByUserAndMusicId(UserDetail user, int musicId); + + Page findByUser_Card_ExtIdAndMusicId(long userId, int musicId, Pageable page); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserActRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserActRepository.java new file mode 100644 index 00000000..aafa880b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserActRepository.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserAct; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserActRepository") +public interface UserActRepository extends JpaRepository { + + Optional findByUserAndKindAndActivityId(UserDetail user, int kind, int id); + + List findByUser_Card_ExtIdAndKind(long userId, int kind); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserCharacterRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserCharacterRepository.java new file mode 100644 index 00000000..39298c8d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserCharacterRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserCharacter; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserCharacterRepository") +public interface UserCharacterRepository extends JpaRepository { + + List findByUser_Card_ExtId(long userId); + + Optional findByUserAndCharacterId(UserDetail user, int characterId); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserDataRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserDataRepository.java new file mode 100644 index 00000000..ca93f173 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserDataRepository.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserDataRepository") +public interface UserDataRepository extends JpaRepository { + Optional findByCard_ExtId(long userId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserExtendRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserExtendRepository.java new file mode 100644 index 00000000..d4e3be7a --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserExtendRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserExtend; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserExtendRepository") +public interface UserExtendRepository extends JpaRepository { + + Optional findByUser(UserDetail user); + + Optional findByUser_Card_ExtId(Long extId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserFavoriteRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserFavoriteRepository.java new file mode 100644 index 00000000..56eacfd1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserFavoriteRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserFavorite; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserFavoriteRepository") +public interface UserFavoriteRepository extends JpaRepository { + + Optional findByUserAndItemKind(UserDetail user, int kind); + //Optional findByUserIdAndItemKind(long userId, int kind); + + List findByUserIdAndItemKind(long userId, int kind); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserItemRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserItemRepository.java new file mode 100644 index 00000000..dc3430e3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserItemRepository.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserItem; + +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserItemRepository") +public interface UserItemRepository extends JpaRepository { + + Optional findByUserAndItemKindAndItemId(UserDetail user, int itemKind, int itemId); + + Page findByUser_Card_ExtIdAndItemKind(long userId, int kind, Pageable page); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserLoginBonusRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserLoginBonusRepository.java new file mode 100644 index 00000000..b165064f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserLoginBonusRepository.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserLoginBonus; + +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserLoginBonusRepository") +public interface UserLoginBonusRepository extends JpaRepository { + + Optional findByUserAndBonusId(UserDetail user, int bonusId); + + Page findByUser_Card_ExtId(long userId, Pageable page); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserMapRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserMapRepository.java new file mode 100644 index 00000000..1d07fe42 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserMapRepository.java @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserMap; + +import java.util.Optional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserMapRepository") +public interface UserMapRepository extends JpaRepository { + + Optional findByUserAndMapId(UserDetail user, int mapId); + + Page findByUser_Card_ExtId(long userId, Pageable page); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserMusicDetailRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserMusicDetailRepository.java new file mode 100644 index 00000000..930226dd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserMusicDetailRepository.java @@ -0,0 +1,22 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserMusicDetail; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserMusicDetailRepository") +public interface UserMusicDetailRepository extends JpaRepository { + + Optional findByUserAndMusicIdAndLevel(UserDetail user, int musicId, int level); + + Page findByUser_Card_ExtId(long userId, Pageable page); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserOptionRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserOptionRepository.java new file mode 100644 index 00000000..22f7dc41 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserOptionRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserOption; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserOptionRepository") +public interface UserOptionRepository extends JpaRepository { + + Optional findByUser(UserDetail user); + + Optional findByUser_Card_ExtId(Long extId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserRateRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserRateRepository.java new file mode 100644 index 00000000..5e60aacd --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserRateRepository.java @@ -0,0 +1,22 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserRate; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserRateRepository") +public interface UserRateRepository extends JpaRepository { + + Optional findByUserAndMusicId(UserDetail user, int musicId); + + List findByUser_Card_ExtId(long userId); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserUdemaeRepository.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserUdemaeRepository.java new file mode 100644 index 00000000..eb4fc27f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/dao/userdata/UserUdemaeRepository.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.maimai2.dao.userdata; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserUdemae; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("Maimai2UserUdemaeRepository") +public interface UserUdemaeRepository extends JpaRepository { + + Optional findByUser(UserDetail user); + + Optional findByUser_Card_ExtId(Long extId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/BaseHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/BaseHandler.java new file mode 100644 index 00000000..97ff46f2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/BaseHandler.java @@ -0,0 +1,13 @@ +package icu.samnyan.aqua.sega.maimai2.handler; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +public interface BaseHandler { + + String handle(Map request) throws JsonProcessingException; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameEventHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameEventHandler.java new file mode 100644 index 00000000..41193915 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameEventHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +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.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameEventHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameEventHandler.class); + + //private final GameEventRepository gameEventRepository; + + private final StringMapper mapper; + + public GetGameEventHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = Integer.toString((int) request.get("type")); + + List gameEventList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("gameEventList", gameEventList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameRankingHandler.java new file mode 100644 index 00000000..548111b3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameRankingHandler.java @@ -0,0 +1,43 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameRankingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameRankingHandler.class); + + private final StringMapper mapper; + + public GetGameRankingHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + String type = Integer.toString((int) request.get("type")); + + List gameRankingList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("type", type); + resultMap.put("gameRankingList", gameRankingList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameSettingHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameSettingHandler.java new file mode 100644 index 00000000..12b50650 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameSettingHandler.java @@ -0,0 +1,67 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.response.GetGameSettingResp; +import icu.samnyan.aqua.sega.maimai2.model.response.data.GameSetting; +import icu.samnyan.aqua.sega.general.dao.PropertyEntryRepository; +import icu.samnyan.aqua.sega.general.model.PropertyEntry; +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.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameSettingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameSettingHandler.class); + + private final StringMapper mapper; + + private final PropertyEntryRepository propertyEntryRepository; + + @Autowired + public GetGameSettingHandler(StringMapper mapper, PropertyEntryRepository propertyEntryRepository) { + this.mapper = mapper; + this.propertyEntryRepository = propertyEntryRepository; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + + PropertyEntry start = propertyEntryRepository.findByPropertyKey("reboot_start_time") + .orElseGet(() -> new PropertyEntry("reboot_start_time", "2020-01-01 23:59:00.0")); + PropertyEntry end = propertyEntryRepository.findByPropertyKey("reboot_end_time") + .orElseGet(() -> new PropertyEntry("reboot_end_time", "2020-01-01 23:59:00.0")); + + GameSetting gameSetting = new GameSetting( + false, + 10, + start.getPropertyValue(), + end.getPropertyValue(), + 10000, + 0, + "", + "", + "", + "", + 0); + + GetGameSettingResp resp = new GetGameSettingResp( + true, + gameSetting + ); + + String json = mapper.write(resp); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameTournamentInfoHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameTournamentInfoHandler.java new file mode 100644 index 00000000..47af6a66 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetGameTournamentInfoHandler.java @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +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.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetGameTournamentInfoHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameTournamentInfoHandler.class); + + //private final GameEventRepository gameEventRepository; + + private final StringMapper mapper; + + public GetGameTournamentInfoHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + + List gameTournamentInfoList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("length", 0); + resultMap.put("gameTournamentInfoList", gameTournamentInfoList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetTransferFriendHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetTransferFriendHandler.java new file mode 100644 index 00000000..86270fa5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetTransferFriendHandler.java @@ -0,0 +1,43 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetTransferFriendHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetTransferFriendHandler.class); + + private final StringMapper mapper; + + public GetTransferFriendHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + int userId = (int) request.get("userId"); + + List transferFriendList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("transferFriendList", transferFriendList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserActivityHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserActivityHandler.java new file mode 100644 index 00000000..d6ad149f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserActivityHandler.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserActRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserActivity; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserAct; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserActivityHandler") +public class GetUserActivityHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserActivityHandler.class); + + private final BasicMapper mapper; + + private final UserActRepository userActRepository; + + public GetUserActivityHandler(BasicMapper mapper, UserActRepository userActRepository) { + this.mapper = mapper; + this.userActRepository = userActRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + // kind 1 = playList, kind 2 = musicList + // maimaiDX require these two + List userPlayList = userActRepository.findByUser_Card_ExtIdAndKind(userId, 1); + List userMusicList = userActRepository.findByUser_Card_ExtIdAndKind(userId, 2); + + UserActivity userActivity = new UserActivity(); + userActivity.setMusicList(userMusicList); + userActivity.setPlayList(userPlayList); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userActivity", userActivity); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserCardHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserCardHandler.java new file mode 100644 index 00000000..f0b1d8c4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserCardHandler.java @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserCardHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserDataHandler.class); + + private final BasicMapper mapper; + + public GetUserCardHandler(BasicMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + List userCardList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("nextIndex", 0); + resultMap.put("userCardList", userCardList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserCharacterHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserCharacterHandler.java new file mode 100644 index 00000000..5e9ec8e2 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserCharacterHandler.java @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserCharacterRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserCharacter; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserCharacterHandler") +public class GetUserCharacterHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserCharacterHandler.class); + + private final BasicMapper mapper; + + private final UserCharacterRepository userCharacterRepository; + + public GetUserCharacterHandler(BasicMapper mapper, UserCharacterRepository userCharacterRepository) { + this.mapper = mapper; + this.userCharacterRepository = userCharacterRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + List userCharacterList = userCharacterRepository.findByUser_Card_ExtId(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userCharacterList", userCharacterList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserDataHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserDataHandler.java new file mode 100644 index 00000000..eaba78b7 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserDataHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserDataHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserDataHandler.class); + + private final BasicMapper mapper; + + private final UserDataRepository userDataRepository; + + public GetUserDataHandler(BasicMapper mapper, UserDataRepository userDataRepository) { + this.mapper = mapper; + this.userDataRepository = userDataRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + UserDetail userData = userDataRepository.findByCard_ExtId(userId).orElseThrow(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userData", userData); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserExtendHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserExtendHandler.java new file mode 100644 index 00000000..1b25cf7b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserExtendHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserExtendRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserExtend; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserExtendHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserExtendHandler.class); + + private final BasicMapper mapper; + + private final UserExtendRepository userExtendRepository; + + public GetUserExtendHandler(BasicMapper mapper, UserExtendRepository userExtendRepository) { + this.mapper = mapper; + this.userExtendRepository = userExtendRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + UserExtend userExtend = userExtendRepository.findByUser_Card_ExtId(userId).orElseThrow(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userExtend", userExtend); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserFavoriteHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserFavoriteHandler.java new file mode 100644 index 00000000..a493acfc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserFavoriteHandler.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserFavoriteRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserFavorite; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserFavoriteHandler") +public class GetUserFavoriteHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserFavoriteHandler.class); + + private final BasicMapper mapper; + + private final UserFavoriteRepository userFavoriteRepository; + + public GetUserFavoriteHandler(BasicMapper mapper, UserFavoriteRepository userFavoriteRepository) { + this.mapper = mapper; + this.userFavoriteRepository = userFavoriteRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + int itemKind = ((Number) request.get("itemKind")).intValue(); + + List userFavoriteList = userFavoriteRepository.findByUserIdAndItemKind(userId, itemKind); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userFavoriteData", userFavoriteList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserGhostHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserGhostHandler.java new file mode 100644 index 00000000..8018602b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserGhostHandler.java @@ -0,0 +1,43 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserGhostHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserDataHandler.class); + + private final BasicMapper mapper; + + public GetUserGhostHandler(BasicMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + List userGhostList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userGhostList", userGhostList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserItemHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserItemHandler.java new file mode 100644 index 00000000..731fe271 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserItemHandler.java @@ -0,0 +1,59 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserItemRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserItem; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserItemHandler") +public class GetUserItemHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserItemHandler.class); + + private final BasicMapper mapper; + + private final UserItemRepository userItemRepository; + + public GetUserItemHandler(BasicMapper mapper, UserItemRepository userItemRepository) { + this.mapper = mapper; + this.userItemRepository = userItemRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + long nextIndexVal = ((Number) request.get("nextIndex")).longValue(); + int maxCount = ((Number) request.get("maxCount")).intValue(); + + long mul = 10000000000L; + + int kind = (int) (nextIndexVal / mul); + int nextIndex = (int) (nextIndexVal % mul); + int pageNum = nextIndex / maxCount; + + Page dbPage = userItemRepository.findByUser_Card_ExtIdAndItemKind(userId, kind, PageRequest.of(pageNum, maxCount)); + + long currentIndex = kind * mul + maxCount * pageNum + dbPage.getNumberOfElements(); + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex); + resultMap.put("itemKind", kind); + resultMap.put("userItemList", dbPage.getContent()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserLoginBonusHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserLoginBonusHandler.java new file mode 100644 index 00000000..b945c500 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserLoginBonusHandler.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserLoginBonusRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserLoginBonus; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserLoginBonusHandler") +public class GetUserLoginBonusHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserLoginBonusHandler.class); + + private final BasicMapper mapper; + + private final UserLoginBonusRepository userLoginBonusRepository; + + public GetUserLoginBonusHandler(BasicMapper mapper, UserLoginBonusRepository userLoginBonusRepository) { + this.mapper = mapper; + this.userLoginBonusRepository = userLoginBonusRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + int nextIndexVal = ((Number) request.get("nextIndex")).intValue(); + int maxCount = ((Number) request.get("maxCount")).intValue(); + + int pageNum = nextIndexVal / maxCount; + + Page dbPage = userLoginBonusRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount)); + + long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex); + resultMap.put("userLoginBonusList", dbPage.getContent()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserMapHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserMapHandler.java new file mode 100644 index 00000000..6385aa50 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserMapHandler.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserMapRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserMap; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserMapHandler") +public class GetUserMapHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserMapHandler.class); + + private final BasicMapper mapper; + + private final UserMapRepository userMapRepository; + + public GetUserMapHandler(BasicMapper mapper, UserMapRepository userMapRepository) { + this.mapper = mapper; + this.userMapRepository = userMapRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + int nextIndexVal = ((Number) request.get("nextIndex")).intValue(); + int maxCount = ((Number) request.get("maxCount")).intValue(); + + int pageNum = nextIndexVal / maxCount; + + Page dbPage = userMapRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount)); + + long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex); + resultMap.put("userMapList", dbPage.getContent()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserMusicHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserMusicHandler.java new file mode 100644 index 00000000..c6b95a2b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserMusicHandler.java @@ -0,0 +1,65 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserMusicDetailRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserMusic; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserMusicDetail; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserMusicHandler") +public class GetUserMusicHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserMusicHandler.class); + + private final BasicMapper mapper; + + private final UserMusicDetailRepository userMusicDetailRepository; + + public GetUserMusicHandler(BasicMapper mapper, UserMusicDetailRepository userMusicDetailRepository) { + this.mapper = mapper; + this.userMusicDetailRepository = userMusicDetailRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + int nextIndexVal = ((Number) request.get("nextIndex")).intValue(); + int maxCount = ((Number) request.get("maxCount")).intValue(); + + int pageNum = nextIndexVal / maxCount; + + Page dbPage = userMusicDetailRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount)); + + long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex); + + UserMusic userMusic = new UserMusic(); + userMusic.setUserMusicDetailList(dbPage.getContent()); + + List userMusicList = new ArrayList<>(); + userMusicList.add(userMusic); + + resultMap.put("userMusicList", userMusicList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserOptionHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserOptionHandler.java new file mode 100644 index 00000000..83d8dd4d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserOptionHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserOptionRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserOption; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserOptionHandler") +public class GetUserOptionHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserOptionHandler.class); + + private final BasicMapper mapper; + + private final UserOptionRepository userOptionRepository; + + public GetUserOptionHandler(BasicMapper mapper, UserOptionRepository userOptionRepository) { + this.mapper = mapper; + this.userOptionRepository = userOptionRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + UserOption userOption = userOptionRepository.findByUser_Card_ExtId(userId).orElseThrow(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userOption", userOption); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserPreviewHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserPreviewHandler.java new file mode 100644 index 00000000..ccfcf7c8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserPreviewHandler.java @@ -0,0 +1,81 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserOptionRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.response.GetUserPreviewResp; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserOption; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2GetUserPreviewHandler") +public class GetUserPreviewHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserPreviewHandler.class); + + private final BasicMapper mapper; + + private final UserDataRepository userDataRepository; + private final UserOptionRepository userOptionRepository; + + public GetUserPreviewHandler(BasicMapper mapper, UserDataRepository userDataRepository, UserOptionRepository userOptionRepository) { + this.mapper = mapper; + this.userDataRepository = userDataRepository; + this.userOptionRepository = userOptionRepository; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + Optional userDataOptional = userDataRepository.findByCard_ExtId(userId); + + GetUserPreviewResp resp = new GetUserPreviewResp(); + resp.setUserId(userId); + String json; + if (userDataOptional.isPresent() && userDataOptional.get().getUserName() != null) { + UserDetail user = userDataOptional.get(); + Optional userOptionOptional = userOptionRepository.findByUser_Card_ExtId(userId); + resp.setUserName(user.getUserName()); + resp.setLogin(false); + resp.setLastGameId(user.getLastGameId()); + resp.setLastDataVersion(user.getLastDataVersion()); + resp.setLastRomVersion(user.getLastRomVersion()); + resp.setLastLoginDate(user.getLastPlayDate()); + resp.setLastPlayDate(user.getLastPlayDate()); + resp.setPlayerRating(user.getPlayerRating()); + resp.setNameplateId(user.getPlateId()); + resp.setIconId(user.getIconId()); + resp.setTrophyId(0); + resp.setPartnerId(user.getPartnerId()); + resp.setFrameId(user.getFrameId()); + resp.setDispRate(user.getPlayerRating()); + resp.setTotalAwake(user.getTotalAwake()); + resp.setIsNetMember(user.getIsNetMember()); + resp.setDailyBonusDate(user.getDailyBonusDate()); + if (userOptionOptional.isPresent()) { + UserOption option = userOptionOptional.get(); + resp.setHeadPhoneVolume(option.getHeadPhoneVolume()); + } + resp.setInherit(false); + + json = mapper.write(resp); + } else { + json = "{}"; + } + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserRatingHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserRatingHandler.java new file mode 100644 index 00000000..e17c45f8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserRatingHandler.java @@ -0,0 +1,89 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserRateRepository; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserUdemaeRepository; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRating; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserRate; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserUdemae; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserRatingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserRatingHandler.class); + + private final BasicMapper mapper; + + private final UserRateRepository userRateRepository; + private final UserUdemaeRepository userUdemaeRepository; + private final UserDataRepository userDataRepository; + + public GetUserRatingHandler(BasicMapper mapper, UserRateRepository userRateRepository, UserUdemaeRepository userUdemaeRepository, + UserDataRepository userDataRepository) { + this.mapper = mapper; + this.userRateRepository = userRateRepository; + this.userUdemaeRepository = userUdemaeRepository; + this.userDataRepository = userDataRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + List userRate = userRateRepository.findByUser_Card_ExtId(userId); + List emptyRating = new ArrayList<>(); + + UserRating userRating = new UserRating(); + + Optional userDataOptional = userDataRepository.findByCard_ExtId(userId); + if (userDataOptional.isPresent() && userDataOptional.get().getUserName() != null) { + UserDetail user = userDataOptional.get(); + userRating.setRating(user.getPlayerRating()); + } + + // TODO: Fix these, rating is incorrect + + // Old charts (standard) = 25 + userRating.setRatingList(userRate); + + // New charts (DX) = 15 + userRating.setNewRatingList(emptyRating); + + // ?? + userRating.setNextRatingList(emptyRating); + userRating.setNextNewRatingList(emptyRating); + + Optional optionalUserUdemae = userUdemaeRepository.findByUser_Card_ExtId(userId); + if (optionalUserUdemae.isPresent()) { + UserUdemae userUdemae = optionalUserUdemae.get(); + userRating.setUdemae(userUdemae); + } else { + userRating.setUdemae(new UserUdemae()); + } + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("userRating", userRating); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserRegionHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserRegionHandler.java new file mode 100644 index 00000000..973217b4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/GetUserRegionHandler.java @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class GetUserRegionHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserDataHandler.class); + + private final BasicMapper mapper; + + public GetUserRegionHandler(BasicMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + List userRegionList = new ArrayList<>(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", 0); + resultMap.put("userRegionList", userRegionList); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UpsertUserAllHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UpsertUserAllHandler.java new file mode 100644 index 00000000..5300bcaf --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UpsertUserAllHandler.java @@ -0,0 +1,297 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.general.service.CardService; +import icu.samnyan.aqua.sega.maimai2.dao.userdata.*; +import icu.samnyan.aqua.sega.maimai.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.request.UpsertUserAll; +import icu.samnyan.aqua.sega.maimai2.model.request.data.UserAll; +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserActivity; +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRating; +import icu.samnyan.aqua.sega.maimai2.model.userdata.*; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("Maimai2UpsertUserAllHandler") +public class UpsertUserAllHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(UpsertUserAllHandler.class); + + private final BasicMapper mapper; + + private final CardService cardService; + + private final UserDataRepository userDataRepository; + private final UserExtendRepository userExtendRepository; + private final UserOptionRepository userOptionRepository; + private final UserItemRepository userItemRepository; + private final UserMusicDetailRepository userMusicDetailRepository; + private final UserActRepository userActRepository; + private final UserCharacterRepository userCharacterRepository; + private final UserMapRepository userMapRepository; + private final UserLoginBonusRepository userLoginBonusRepository; + private final UserFavoriteRepository userFavoriteRepository; + private final UserRateRepository userRateRepository; + private final UserUdemaeRepository userUdemaeRepository; + + public UpsertUserAllHandler(BasicMapper mapper, CardService cardService, UserDataRepository userDataRepository, UserExtendRepository userExtendRepository, UserOptionRepository userOptionRepository, UserItemRepository userItemRepository, UserMusicDetailRepository userMusicDetailRepository, UserActRepository userActRepository, UserCharacterRepository userCharacterRepository, UserMapRepository userMapRepository, UserLoginBonusRepository userLoginBonusRepository, UserFavoriteRepository userFavoriteRepository, UserRateRepository userRateRepository, UserUdemaeRepository userUdemaeRepository) { + this.mapper = mapper; + this.cardService = cardService; + this.userDataRepository = userDataRepository; + this.userExtendRepository = userExtendRepository; + this.userOptionRepository = userOptionRepository; + this.userItemRepository = userItemRepository; + this.userMusicDetailRepository = userMusicDetailRepository; + this.userActRepository = userActRepository; + this.userCharacterRepository = userCharacterRepository; + this.userMapRepository = userMapRepository; + this.userLoginBonusRepository = userLoginBonusRepository; + this.userFavoriteRepository = userFavoriteRepository; + this.userRateRepository = userRateRepository; + this.userUdemaeRepository = userUdemaeRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + + UpsertUserAll upsertUserAll = mapper.convert(request, UpsertUserAll.class); + long userId = upsertUserAll.getUserId(); + UserAll userAll = upsertUserAll.getUpsertUserAll(); + + // UserData + UserDetail userData; + UserDetail newUserData; + if (userAll.getUserData() == null) { + return null; + } else { + newUserData = userAll.getUserData().get(0); + Optional userOptional = userDataRepository.findByCard_ExtId(userId); + + if (userOptional.isPresent()) { + userData = userOptional.get(); + } else { + userData = new UserDetail(); + Card card = cardService.getCardByExtId(userId).orElseThrow(); + userData.setCard(card); + } + + newUserData.setId(userData.getId()); + newUserData.setCard(userData.getCard()); + // Decode Username + String userName = new String(newUserData.getUserName()); + + newUserData.setUserName(userName); + userDataRepository.saveAndFlush(newUserData); + } + + // UserExtend + if (userAll.getUserExtend() != null) { + UserExtend newUserExtend = userAll.getUserExtend().get(0); + + Optional userExtendOptional = userExtendRepository.findByUser(newUserData); + UserExtend userExtend = userExtendOptional.orElseGet(() -> new UserExtend(newUserData)); + + newUserExtend.setId(userExtend.getId()); + newUserExtend.setUser(userExtend.getUser()); + + userExtendRepository.save(newUserExtend); + } + + // UserOption + if (userAll.getUserOption() != null) { + UserOption newUserOption = userAll.getUserOption().get(0); + + Optional userOptionOptional = userOptionRepository.findByUser(newUserData); + UserOption userOption = userOptionOptional.orElseGet(() -> new UserOption(newUserData)); + + newUserOption.setId(userOption.getId()); + newUserOption.setUser(userOption.getUser()); + + userOptionRepository.save(newUserOption); + } + + // UserCharacterList + if (userAll.getUserCharacterList() != null) { + List userCharacterList = userAll.getUserCharacterList(); + List newUserCharacterList = new ArrayList<>(); + for (UserCharacter newUserCharacter : userCharacterList) { + int id = newUserCharacter.getCharacterId(); + + Optional characterOptional = userCharacterRepository.findByUserAndCharacterId(newUserData, id); + UserCharacter userCharacter = characterOptional.orElseGet(() -> new UserCharacter(newUserData)); + + newUserCharacter.setId(userCharacter.getId()); + newUserCharacter.setUser(newUserData); + newUserCharacterList.add(newUserCharacter); + } + userCharacterRepository.saveAll(newUserCharacterList); + } + + // UserGhost : worthless + + // UserMapList + if (userAll.getUserMapList() != null) { + List userMapList = userAll.getUserMapList(); + List newUserMapList = new ArrayList<>(); + for (UserMap newUserMap : userMapList) { + int mapId = newUserMap.getMapId(); + + Optional mapOptional = userMapRepository.findByUserAndMapId(newUserData, mapId); + UserMap userMap = mapOptional.orElseGet(() -> new UserMap(newUserData)); + + newUserMap.setId(userMap.getId()); + newUserMap.setUser(newUserData); + newUserMapList.add(newUserMap); + } + userMapRepository.saveAll(newUserMapList); + } + + // UserLoginBonusList + if (userAll.getUserLoginBonusList() != null) { + List userLoginBonusList = userAll.getUserLoginBonusList(); + List newUserLoginBonusList = new ArrayList<>(); + for (UserLoginBonus newUserLoginBonus : userLoginBonusList) { + int bonusId = newUserLoginBonus.getBonusId(); + + Optional loginBonusOptional = userLoginBonusRepository.findByUserAndBonusId(newUserData, bonusId); + UserLoginBonus userLoginBonus = loginBonusOptional.orElseGet(() -> new UserLoginBonus(newUserData)); + + newUserLoginBonus.setId(userLoginBonus.getId()); + newUserLoginBonus.setUser(newUserData); + newUserLoginBonusList.add(newUserLoginBonus); + } + userLoginBonusRepository.saveAll(newUserLoginBonusList); + } + + // UserRatingList + if (userAll.getUserRatingList() != null) { + UserRating userRating = userAll.getUserRatingList().get(0); + + //Udemae + UserUdemae newUserUdemae = userRating.getUdemae(); + + Optional udemaeOptional = userUdemaeRepository.findByUser(newUserData); + UserUdemae userUdemae = udemaeOptional.orElseGet(() -> new UserUdemae(newUserData)); + + newUserUdemae.setId(userUdemae.getId()); + newUserUdemae.setUser(newUserData); + + userUdemaeRepository.saveAndFlush(newUserUdemae); + + List userRateList = userRating.getRatingList(); + List newUserRateList = new ArrayList<>(); + + // UserRate + for (UserRate newUserRate : userRateList) { + int musicId = newUserRate.getMusicId(); + + Optional rateOptional = userRateRepository.findByUserAndMusicId(newUserData, musicId); + UserRate userRate = rateOptional.orElseGet(() -> new UserRate(newUserData)); + + newUserRate.setId(userRate.getId()); + newUserRate.setUser(newUserData); + newUserRateList.add(newUserRate); + + } + userRateRepository.saveAll(newUserRateList); + } + + // UserItemList + if (userAll.getUserItemList() != null) { + List userItemList = userAll.getUserItemList(); + List newUserItemList = new ArrayList<>(); + + for (UserItem newUserItem : userItemList) { + int itemId = newUserItem.getItemId(); + int itemKind = newUserItem.getItemKind(); + + Optional itemOptional = userItemRepository.findByUserAndItemKindAndItemId(newUserData, itemKind, itemId); + UserItem userItem = itemOptional.orElseGet(() -> new UserItem(newUserData)); + + newUserItem.setId(userItem.getId()); + newUserItem.setUser(newUserData); + newUserItemList.add(newUserItem); + + } + userItemRepository.saveAll(newUserItemList); + } + + // UserMusicDetailList + if (userAll.getUserMusicDetailList() != null) { + List userMusicDetailList = userAll.getUserMusicDetailList(); + List newUserMusicDetailList = new ArrayList<>(); + + for (UserMusicDetail newUserMusicDetail : userMusicDetailList) { + int musicId = newUserMusicDetail.getMusicId(); + int level = newUserMusicDetail.getLevel(); + + Optional musicDetailOptional = userMusicDetailRepository.findByUserAndMusicIdAndLevel(newUserData, musicId, level); + UserMusicDetail userMusicDetail = musicDetailOptional.orElseGet(() -> new UserMusicDetail(newUserData)); + + newUserMusicDetail.setId(userMusicDetail.getId()); + newUserMusicDetail.setUser(newUserData); + newUserMusicDetailList.add(newUserMusicDetail); + } + userMusicDetailRepository.saveAll(newUserMusicDetailList); + } + + // UserFavoriteList + if (userAll.getUserFavoriteList() != null) { + List userFavoriteList = userAll.getUserFavoriteList(); + List newUserFavoriteList = new ArrayList<>(); + for (UserFavorite newUserFavorite : userFavoriteList) { + int itemKind = newUserFavorite.getItemKind(); + + Optional favoriteOptional = userFavoriteRepository.findByUserAndItemKind(newUserData, itemKind); + UserFavorite userFavorite = favoriteOptional.orElseGet(() -> new UserFavorite()); + + newUserFavorite.setId(userFavorite.getId()); + newUserFavorite.setUser(newUserData); + newUserFavoriteList.add(newUserFavorite); + } + userFavoriteRepository.saveAll(newUserFavoriteList); + } + + // UserActivityList + if (userAll.getUserActivityList() != null) { + UserActivity userActivity = userAll.getUserActivityList().get(0); + List newUserActList = new ArrayList<>(); + + List> activityList = new ArrayList<>(); + activityList.add(userActivity.getMusicList()); + activityList.add(userActivity.getPlayList()); + + for (List actList : activityList) { + for (UserAct newUserAct : actList) { + int kind = newUserAct.getKind(); + int id = newUserAct.getActivityId(); + + if (kind != 0 && id != 0) { + Optional activityOptional = userActRepository.findByUserAndKindAndActivityId(newUserData, kind, id); + UserAct userAct = activityOptional.orElseGet(() -> new UserAct(newUserData)); + + newUserAct.setId(userAct.getId()); + newUserAct.setUser(newUserData); + newUserActList.add(newUserAct); + } + } + } + newUserActList.sort((a, b) -> Long.compare(b.getSortNumber(), a.getSortNumber())); + userActRepository.saveAll(newUserActList); + } + + return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertUserAllApi\"}"; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UserLoginHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UserLoginHandler.java new file mode 100644 index 00000000..494721aa --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UserLoginHandler.java @@ -0,0 +1,37 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.maimai2.model.response.UserLoginResp; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UserLoginHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(UserLoginHandler.class); + + private final BasicMapper mapper; + + public UserLoginHandler(BasicMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + //String userId = Integer.toString((int)request.get("userId")); + + UserLoginResp resp = new UserLoginResp(); + + String json = mapper.write(resp); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UserLogoutHandler.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UserLogoutHandler.java new file mode 100644 index 00000000..db84d49d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/impl/UserLogoutHandler.java @@ -0,0 +1,34 @@ +package icu.samnyan.aqua.sega.maimai2.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chunithm.model.response.CodeResp; +import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class UserLogoutHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(UserLogoutHandler.class); + + private final BasicMapper mapper; + + public UserLogoutHandler(BasicMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + + String json = mapper.write(new CodeResp(1)); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/UpsertUserAll.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/UpsertUserAll.java new file mode 100644 index 00000000..b0d2bf6c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/UpsertUserAll.java @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.maimai2.model.request; + +import com.fasterxml.jackson.annotation.JsonProperty; +import icu.samnyan.aqua.sega.maimai2.model.request.data.UserAll; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UpsertUserAll implements Serializable { + public long userId; + public long playlogId; + @JsonProperty("isEventMode") + public boolean isEventMode; + @JsonProperty("isFreePlay") + public boolean isFreePlay; + public UserAll upsertUserAll; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/data/UserAll.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/data/UserAll.java new file mode 100644 index 00000000..cc60cc18 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/data/UserAll.java @@ -0,0 +1,38 @@ +package icu.samnyan.aqua.sega.maimai2.model.request.data; + +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserActivity; +import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRating; +import icu.samnyan.aqua.sega.maimai2.model.userdata.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserAll implements Serializable { + public List userData; + public List userExtend; + public List userOption; + public List userCharacterList; + public List userGhost; + public List userMapList; + public List userLoginBonusList; + public List userRatingList; + public List userItemList; + public List userMusicDetailList; + public List userFavoriteList; + public List userActivityList; + public String isNewCharacterList; + public String isNewMapList; + public String isNewLoginBonusList; + public String isNewItemList; + public String isNewMusicDetailList; + public String isNewFavoriteList; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/GetGameSettingResp.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/GetGameSettingResp.java new file mode 100644 index 00000000..f4b88bae --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/GetGameSettingResp.java @@ -0,0 +1,20 @@ +package icu.samnyan.aqua.sega.maimai2.model.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import icu.samnyan.aqua.sega.maimai2.model.response.data.GameSetting; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GetGameSettingResp { + + @JsonProperty("isAouAccession") + private boolean isAouAccession; + private GameSetting gameSetting; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/GetUserPreviewResp.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/GetUserPreviewResp.java new file mode 100644 index 00000000..8922b63d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/GetUserPreviewResp.java @@ -0,0 +1,39 @@ +package icu.samnyan.aqua.sega.maimai2.model.response; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GetUserPreviewResp { + + private long userId; + private String userName; + @JsonProperty("isLogin") + private boolean isLogin; + private String lastGameId; + private String lastDataVersion; + private String lastRomVersion; + private String lastLoginDate; + private String lastPlayDate; + private int playerRating; + private int nameplateId; + private int iconId; + private int trophyId; + private int partnerId; + private int frameId; + private int dispRate; + private int totalAwake; + private int isNetMember; + private String dailyBonusDate; + private int headPhoneVolume; + @JsonProperty("isInherit") + private boolean isInherit; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/UserLoginResp.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/UserLoginResp.java new file mode 100644 index 00000000..d3518adc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/UserLoginResp.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.maimai2.model.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserLoginResp { + public int returnCode = 1; + public String lastLoginDate = "2020-01-01 00:00:00.0"; + public int loginCount = 1; + public int consecutiveLoginCount = 0; + public int loginId = 1; // What is this? +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/GameSetting.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/GameSetting.java new file mode 100644 index 00000000..8a851a4c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/GameSetting.java @@ -0,0 +1,27 @@ +package icu.samnyan.aqua.sega.maimai2.model.response.data; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class GameSetting { + @JsonProperty("isMaintenance") + private boolean isMaintenance; + private int requestInterval; + private String rebootStartTime; + private String rebootEndTime; + private int movieUploadLimit; + private int movieStatus; + private String movieServerUri; + private String deliverServerUri; + private String oldServerUri; + private String usbDlServerUri; + private int rebootInterval; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserActivity.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserActivity.java new file mode 100644 index 00000000..08a85dfa --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserActivity.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.maimai2.model.response.data; + +import java.util.List; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserAct; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserActivity { + private List playList; + private List musicList; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserMusic.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserMusic.java new file mode 100644 index 00000000..a2a0030f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserMusic.java @@ -0,0 +1,18 @@ +package icu.samnyan.aqua.sega.maimai2.model.response.data; + +import java.util.List; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserMusicDetail; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserMusic { + private List userMusicDetailList; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRating.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRating.java new file mode 100644 index 00000000..67edec68 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/response/data/UserRating.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.sega.maimai2.model.response.data; + +import java.util.List; + +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserRate; +import icu.samnyan.aqua.sega.maimai2.model.userdata.UserUdemae; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserRating { + private int rating; + private List ratingList; + private List newRatingList; + private List nextRatingList; + private List nextNewRatingList; + private UserUdemae udemae; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/MapEncountNpc.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/MapEncountNpc.java new file mode 100644 index 00000000..942b37a0 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/MapEncountNpc.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2MapEncountNpc") +@Table(name = "maimai2_user_npc_encount") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MapEncountNpc implements Serializable{ + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + private int npcId; + private int musicId; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "extend_id") + private UserExtend userExtend; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserAct.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserAct.java new file mode 100644 index 00000000..623afb73 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserAct.java @@ -0,0 +1,50 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserActivity") +@Table(name = "maimai2_user_activity") +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonPropertyOrder({"kind", "id", "sortNumber", "param1", "param2", "param3", "param4"}) +public class UserAct implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int kind; + + @JsonProperty("id") + private int activityId; + + private long sortNumber; + private int param1; + private int param2; + private int param3; + private int param4; + + public UserAct(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserCharacter.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserCharacter.java new file mode 100644 index 00000000..64e397d3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserCharacter.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserCharacter") +@Table(name = "maimai2_user_character") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserCharacter implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int characterId; + private int level; + private int awakening; + private int useCount; + + public UserCharacter(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserDetail.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserDetail.java new file mode 100644 index 00000000..a5630a77 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserDetail.java @@ -0,0 +1,107 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; +import java.util.List; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer; +import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.maimai2.util.IntegerListConverter; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserData") +@Table(name = "maimai2_user_detail") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserDetail implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonSerialize(using = AccessCodeSerializer.class) + @JsonProperty(value = "accessCode", access = JsonProperty.Access.READ_ONLY) + @OneToOne + @JoinColumn(name = "aime_card_id") + private Card card; + + private String userName; + private int isNetMember; + private int iconId; + private int plateId; + private int titleId; + private int partnerId; + private int frameId; + private int selectMapId; + private int totalAwake; + private int gradeRating; + private int musicRating; + private int playerRating; + private int highestRating; + private int gradeRank; + + @Convert(converter = IntegerListConverter.class) + private List charaSlot; // Entries: 5 + + @Convert(converter = IntegerListConverter.class) + private List charaLockSlot; // Entries: 5 + + private long contentBit; + private int playCount; + private String eventWatchedDate; + private String lastGameId; + private String lastRomVersion; + private String lastDataVersion; + private String lastLoginDate; + private String lastPlayDate; + private int lastPlaceId; + private String lastPlaceName; + private int lastAllNetId; + private int lastRegionId; + private String lastRegionName; + private String lastClientId; + private String lastCountryCode; + private String firstGameId; + private String firstRomVersion; + private String firstDataVersion; + private String firstPlayDate; + private String compatibleCmVersion; + private String dailyBonusDate; + private int playVsCount; + private int playSyncCount; + private int winCount; + private int helpCount; + private int comboCount; + private long totalDeluxscore; + private long totalBasicDeluxscore; + private long totalAdvancedDeluxscore; + private long totalExpertDeluxscore; + private long totalMasterDeluxscore; + private long totalReMasterDeluxscore; + private int totalSync; + private int totalBasicSync; + private int totalAdvancedSync; + private int totalExpertSync; + private int totalMasterSync; + private int totalReMasterSync; + private long totalAchievement; + private long totalBasicAchievement; + private long totalAdvancedAchievement; + private long totalExpertAchievement; + private long totalMasterAchievement; + private long totalReMasterAchievement; + private long dateTime; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserExtend.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserExtend.java new file mode 100644 index 00000000..9136a589 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserExtend.java @@ -0,0 +1,65 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import icu.samnyan.aqua.sega.maimai2.util.IntegerListConverter; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserExtend") +@Table(name = "maimai2_user_extend") +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonPropertyOrder({"selectMusicId", "selectDifficultyId", "categoryIndex", "musicIndex", +"extraFlag", "selectScoreType", "extendContentBit", "isPhotoAgree", "isGotoCodeRead", +"selectResultDetails", "sortCategorySetting", "sortMusicSetting", "selectedCardList", "encountMapNpcList"}) +public class UserExtend implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int selectMusicId; + private int selectDifficultyId; + private int categoryIndex; + private int musicIndex; + private int extraFlag; + private int selectScoreType; + private long extendContentBit; + @JsonProperty("isPhotoAgree") + private boolean isPhotoAgree; + @JsonProperty("isGotoCodeRead") + private boolean isGotoCodeRead; + private boolean selectResultDetails; + private int sortCategorySetting; //enum SortTabID + private int sortMusicSetting; //enum SortMusicID + + @Convert(converter = IntegerListConverter.class) + private List selectedCardList; + + @OneToMany(mappedBy = "userExtend") + private List encountMapNpcList = new ArrayList<>(); + + public UserExtend(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserFavorite.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserFavorite.java new file mode 100644 index 00000000..7018c965 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserFavorite.java @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + +import icu.samnyan.aqua.sega.maimai2.util.IntegerListConverter; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserFavorite") +@Table(name = "maimai2_user_favorite") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserFavorite implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + @JsonProperty("id") + private long favUserId; + private int itemKind; + + @Convert(converter = IntegerListConverter.class) + private List itemIdList; + + public UserFavorite(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserGhost.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserGhost.java new file mode 100644 index 00000000..169aa98b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserGhost.java @@ -0,0 +1,32 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserGhost { + private String name; + private int iconId; + private int plateId; + private int titleId; + private int rate; + private int udemaeRate; + private String playDatetime; + private int shopId; + private int regionCode; + private int typeId; + private int musicId; + private int difficulty; + private int version; + private List resultBitList; + private int resultNum; + private int achievement; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserItem.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserItem.java new file mode 100644 index 00000000..b2a06805 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserItem.java @@ -0,0 +1,42 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +import javax.persistence.*; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserItem") +@Table(name = "maimai2_user_item") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserItem implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int itemKind; + private int itemId; + private int stock; + private boolean isValid; + + public UserItem(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserLoginBonus.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserLoginBonus.java new file mode 100644 index 00000000..7766df57 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserLoginBonus.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserLoginBonus") +@Table(name = "maimai2_user_login_bonus") +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonPropertyOrder({"bonusId", "point", "isCurrent", "isComplete"}) +public class UserLoginBonus implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int bonusId; + private int point; + @JsonProperty("isCurrent") + private boolean isCurrent; + @JsonProperty("isComplete") + private boolean isComplete; + + public UserLoginBonus(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserMap.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserMap.java new file mode 100644 index 00000000..b5f90ede --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserMap.java @@ -0,0 +1,48 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserMap") +@Table(name = "maimai2_user_map") +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonPropertyOrder({"mapId", "distance", "isLock", "isClear", "isComplete"}) +public class UserMap implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int mapId; + private int distance; + @JsonProperty("isLock") + private boolean isLock; + @JsonProperty("isClear") + private boolean isClear; + @JsonProperty("isComplete") + private boolean isComplete; + + public UserMap(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserMusicDetail.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserMusicDetail.java new file mode 100644 index 00000000..6aaf0865 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserMusicDetail.java @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "MaiMai2UserMusicDetail") +@Table(name = "maimai2_user_music_detail") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserMusicDetail implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int musicId; + private int level; + private int playCount; + private int achievement; + private int comboStatus; + private int syncStatus; + private int deluxscoreMax; + private int scoreRank; + + public UserMusicDetail(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserOption.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserOption.java new file mode 100644 index 00000000..9cf0c637 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserOption.java @@ -0,0 +1,79 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserOption") +@Table(name = "maimai2_user_option") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserOption implements Serializable { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int optionKind; + private int noteSpeed; + private int slideSpeed; + private int touchSpeed; + private int tapDesign; + private int holdDesign; + private int slideDesign; + private int starType; + private int outlineDesign; + private int noteSize; + private int slideSize; + private int touchSize; + private int starRotate; + private int dispCenter; + private int dispChain; + private int dispRate; + private int dispBar; + private int touchEffect; + private int submonitorAnimation; + private int submonitorAchive; + private int submonitorAppeal; + private int matching; + private int trackSkip; + private int brightness; + private int mirrorMode; + private int dispJudge; + private int dispJudgePos; + private int dispJudgeTouchPos; + private int adjustTiming; + private int ansVolume; + private int tapHoldVolume; + private int criticalSe; + private int breakSe; + private int breakVolume; + private int exSe; + private int exVolume; + private int slideSe; + private int slideVolume; + private int touchHoldVolume; + private int damageSeVolume; + private int headPhoneVolume; + private int sortTab; + private int sortMusic; + + public UserOption(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserRate.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserRate.java new file mode 100644 index 00000000..52df08b6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserRate.java @@ -0,0 +1,41 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserRate") +@Table(name = "maimai2_user_rate") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserRate implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int musicId; + private int level; + private int romVersion; + private int achievement; + + public UserRate(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserUdemae.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserUdemae.java new file mode 100644 index 00000000..72e3bd88 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserUdemae.java @@ -0,0 +1,51 @@ +package icu.samnyan.aqua.sega.maimai2.model.userdata; + +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "Maimai2UserUdemae") +@Table(name = "maimai2_user_udemae") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserUdemae implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserDetail user; + + private int rate; + private int maxRate; + private int totalWinNum; + private int totalLoseNum; + private int maxWinNum; + private int maxLoseNum; + private int winNum; + private int loseNum; + private int npcTotalWinNum; + private int npcTotalLoseNum; + private int npcMaxWinNum; + private int npcMaxLoseNum; + private int npcWinNum; + private int npcLoseNum; + + public UserUdemae(UserDetail user) { + this.user = user; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java b/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java new file mode 100644 index 00000000..555e9e74 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/util/IntegerListConverter.java @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.maimai2.util; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; + +import static java.util.Collections.*; + +import java.util.ArrayList; + +@Converter +public class IntegerListConverter implements AttributeConverter, String> { + private static final String SPLIT_CHAR = ";"; + + @Override + public String convertToDatabaseColumn(List integerList) { + if (integerList != null && !integerList.isEmpty()) { + StringBuilder str = new StringBuilder(); + Iterator iter = integerList.iterator(); + while(iter.hasNext()) { + str.append(iter.next()); + if(iter.hasNext()){ + str.append(SPLIT_CHAR); + } + } + return str.toString(); + } else { + return ""; + } + } + + @Override + public List convertToEntityAttribute(String string) { + if (string != null && !string.isEmpty()) { + List iList = new ArrayList(); + for (String s : string.split(SPLIT_CHAR)) { + iList.add(Integer.parseInt(s)); + } + return iList; + } else { + return emptyList(); + } + } +} \ No newline at end of file diff --git a/src/main/resources/db/migration/mysql/V31__add_maimai2_table.sql b/src/main/resources/db/migration/mysql/V31__add_maimai2_table.sql new file mode 100644 index 00000000..885e3451 --- /dev/null +++ b/src/main/resources/db/migration/mysql/V31__add_maimai2_table.sql @@ -0,0 +1,279 @@ +CREATE TABLE maimai2_user_detail ( + id BIGINT auto_increment PRIMARY KEY, + aime_card_id BIGINT, + user_name VARCHAR (255), + is_net_member INTEGER, + icon_id INTEGER, + plate_id INTEGER, + title_id INTEGER, + partner_id INTEGER, + frame_id INTEGER, + select_map_id INTEGER, + total_awake INTEGER, + grade_rating INTEGER, + music_rating INTEGER, + player_rating INTEGER, + highest_rating INTEGER, + grade_rank INTEGER, + chara_slot VARCHAR (255), + chara_lock_slot VARCHAR (255), + content_bit BIGINT, + play_count INTEGER, + event_watched_date VARCHAR (255), + last_game_id VARCHAR (255), + last_rom_version VARCHAR (255), + last_data_version VARCHAR (255), + last_login_date VARCHAR (255), + last_play_date VARCHAR (255), + last_place_id INTEGER, + last_place_name VARCHAR (255), + last_all_net_id INTEGER, + last_region_id INTEGER, + last_region_name VARCHAR (255), + last_client_id VARCHAR (255), + last_country_code VARCHAR (255), + first_game_id VARCHAR (255), + first_rom_version VARCHAR (255), + first_data_version VARCHAR (255), + first_play_date VARCHAR (255), + compatible_cm_version VARCHAR (255), + daily_bonus_date VARCHAR (255), + play_vs_count INTEGER, + play_sync_count INTEGER, + win_count INTEGER, + help_count INTEGER, + combo_count INTEGER, + total_deluxscore BIGINT, + total_basic_deluxscore BIGINT, + total_advanced_deluxscore BIGINT, + total_expert_deluxscore BIGINT, + total_master_deluxscore BIGINT, + total_re_master_deluxscore BIGINT, + total_sync INTEGER, + total_basic_sync INTEGER, + total_advanced_sync INTEGER, + total_expert_sync INTEGER, + total_master_sync INTEGER, + total_re_master_sync INTEGER, + total_achievement BIGINT, + total_basic_achievement BIGINT, + total_advanced_achievement BIGINT, + total_expert_achievement BIGINT, + total_master_achievement BIGINT, + total_re_master_achievement BIGINT, + date_time BIGINT, + constraint FKbv9jxq8qw3vvgvio + foreign key (aime_card_id) references sega_card (id) +); + + +CREATE TABLE maimai2_user_activity ( + id BIGINT auto_increment PRIMARY KEY, + kind INTEGER, + activity_id INTEGER, + sort_number BIGINT, + param1 INTEGER, + param2 INTEGER, + param3 INTEGER, + param4 INTEGER, + user_id BIGINT, + constraint FKzosmkjggsr4kbwp8 + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_character ( + id BIGINT auto_increment PRIMARY KEY, + character_id INTEGER, + level INTEGER, + awakening INTEGER, + use_count INTEGER, + user_id BIGINT, + constraint FK7pwqw2iax9tkqsio + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_extend ( + id BIGINT auto_increment PRIMARY KEY, + select_music_id INTEGER, + select_difficulty_id INTEGER, + category_index INTEGER, + music_index INTEGER, + extra_flag INTEGER, + select_score_type INTEGER, + extend_content_bit BIGINT, + is_photo_agree BOOLEAN, + is_goto_code_read BOOLEAN, + select_result_details BOOLEAN, + sort_category_setting INTEGER, + sort_music_setting INTEGER, + selected_card_list VARCHAR (255), + user_id BIGINT, + constraint FKkohdzk55oj46xyeq + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_favorite ( + id BIGINT auto_increment PRIMARY KEY, + fav_user_id BIGINT, + item_kind INTEGER, + item_id_list VARCHAR (255), + user_id BIGINT, + constraint FKhedsx72h28k53obe + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_item ( + id BIGINT auto_increment PRIMARY KEY, + item_kind INTEGER, + item_id INTEGER, + stock INTEGER, + is_valid BOOLEAN, + user_id BIGINT, + constraint FKopxaz95c966q7pys + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_login_bonus ( + id BIGINT auto_increment PRIMARY KEY, + bonus_id INTEGER, + point INTEGER, + is_current BOOLEAN, + is_complete BOOLEAN, + user_id BIGINT, + constraint FKmwccayih2sv2smw7 + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_map ( + id BIGINT auto_increment PRIMARY KEY, + map_id INTEGER, + distance INTEGER, + is_lock BOOLEAN, + is_clear BOOLEAN, + is_complete BOOLEAN, + user_id BIGINT, + constraint FKjva7jtg96nwt9539 + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_music_detail ( + id BIGINT auto_increment PRIMARY KEY, + music_id INTEGER, + level INTEGER, + play_count INTEGER, + achievement INTEGER, + combo_status INTEGER, + sync_status INTEGER, + deluxscore_max INTEGER, + score_rank INTEGER, + user_id BIGINT, + constraint FK8hsx2tb67q8nqxgk + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_npc_encount ( + id BIGINT auto_increment PRIMARY KEY, + npc_id INTEGER, + music_id INTEGER, + extend_id BIGINT, + user_id BIGINT, + constraint FKi6sfpfh45h98qjnh + foreign key (user_id) references maimai2_user_detail (id), + constraint FKmfy3j84f6k2ymgxb + foreign key (extend_id) references maimai2_user_extend (id) +); + + +CREATE TABLE maimai2_user_option ( + id BIGINT auto_increment PRIMARY KEY, + option_kind INTEGER, + note_speed INTEGER, + slide_speed INTEGER, + touch_speed INTEGER, + tap_design INTEGER, + hold_design INTEGER, + slide_design INTEGER, + star_type INTEGER, + outline_design INTEGER, + note_size INTEGER, + slide_size INTEGER, + touch_size INTEGER, + star_rotate INTEGER, + disp_center INTEGER, + disp_chain INTEGER, + disp_rate INTEGER, + disp_bar INTEGER, + touch_effect INTEGER, + submonitor_animation INTEGER, + submonitor_achive INTEGER, + submonitor_appeal INTEGER, + matching INTEGER, + track_skip INTEGER, + brightness INTEGER, + mirror_mode INTEGER, + disp_judge INTEGER, + disp_judge_pos INTEGER, + disp_judge_touch_pos INTEGER, + adjust_timing INTEGER, + ans_volume INTEGER, + tap_hold_volume INTEGER, + critical_se INTEGER, + break_se INTEGER, + break_volume INTEGER, + ex_se INTEGER, + ex_volume INTEGER, + slide_se INTEGER, + slide_volume INTEGER, + touch_hold_volume INTEGER, + damage_se_volume INTEGER, + head_phone_volume INTEGER, + sort_tab INTEGER, + sort_music INTEGER, + user_id BIGINT, + constraint FKp3r3s8f6mwfvoyzf + foreign key (user_id) references maimai2_user_detail (id) +); + + + +CREATE TABLE maimai2_user_rate ( + id BIGINT auto_increment PRIMARY KEY, + music_id INTEGER, + level INTEGER, + rom_version INTEGER, + achievement INTEGER, + user_id BIGINT, + constraint FKfaewgvanchzwo8um + foreign key (user_id) references maimai2_user_detail (id) +); + + +CREATE TABLE maimai2_user_udemae ( + id BIGINT auto_increment PRIMARY KEY, + rate INTEGER, + max_rate INTEGER, + total_win_num INTEGER, + total_lose_num INTEGER, + max_win_num INTEGER, + max_lose_num INTEGER, + win_num INTEGER, + lose_num INTEGER, + npc_total_win_num INTEGER, + npc_total_lose_num INTEGER, + npc_max_win_num INTEGER, + npc_max_lose_num INTEGER, + npc_win_num INTEGER, + npc_lose_num INTEGER, + user_id BIGINT, + constraint FK9g2niydg6r5796gg + foreign key (user_id) references maimai2_user_detail (id) +); + diff --git a/src/main/resources/db/migration/sqlite/V31__add_maimai2_table.sql b/src/main/resources/db/migration/sqlite/V31__add_maimai2_table.sql new file mode 100644 index 00000000..b4dff028 --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V31__add_maimai2_table.sql @@ -0,0 +1,277 @@ +CREATE TABLE maimai2_user_detail ( + id INTEGER, + aime_card_id BIGINT REFERENCES sega_card (id) ON DELETE CASCADE, + user_name VARCHAR (255), + is_net_member INTEGER, + icon_id INTEGER, + plate_id INTEGER, + title_id INTEGER, + partner_id INTEGER, + frame_id INTEGER, + select_map_id INTEGER, + total_awake INTEGER, + grade_rating INTEGER, + music_rating INTEGER, + player_rating INTEGER, + highest_rating INTEGER, + grade_rank INTEGER, + chara_slot VARCHAR (255), + chara_lock_slot VARCHAR (255), + content_bit BIGINT, + play_count INTEGER, + event_watched_date VARCHAR (255), + last_game_id VARCHAR (255), + last_rom_version VARCHAR (255), + last_data_version VARCHAR (255), + last_login_date VARCHAR (255), + last_play_date VARCHAR (255), + last_place_id INTEGER, + last_place_name VARCHAR (255), + last_all_net_id INTEGER, + last_region_id INTEGER, + last_region_name VARCHAR (255), + last_client_id VARCHAR (255), + last_country_code VARCHAR (255), + first_game_id VARCHAR (255), + first_rom_version VARCHAR (255), + first_data_version VARCHAR (255), + first_play_date VARCHAR (255), + compatible_cm_version VARCHAR (255), + daily_bonus_date VARCHAR (255), + play_vs_count INTEGER, + play_sync_count INTEGER, + win_count INTEGER, + help_count INTEGER, + combo_count INTEGER, + total_deluxscore BIGINT, + total_basic_deluxscore BIGINT, + total_advanced_deluxscore BIGINT, + total_expert_deluxscore BIGINT, + total_master_deluxscore BIGINT, + total_re_master_deluxscore BIGINT, + total_sync INTEGER, + total_basic_sync INTEGER, + total_advanced_sync INTEGER, + total_expert_sync INTEGER, + total_master_sync INTEGER, + total_re_master_sync INTEGER, + total_achievement BIGINT, + total_basic_achievement BIGINT, + total_advanced_achievement BIGINT, + total_expert_achievement BIGINT, + total_master_achievement BIGINT, + total_re_master_achievement BIGINT, + date_time BIGINT, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_activity ( + id INTEGER, + kind INTEGER, + activity_id INTEGER, + sort_number BIGINT, + param1 INTEGER, + param2 INTEGER, + param3 INTEGER, + param4 INTEGER, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_character ( + id INTEGER, + character_id INTEGER, + level INTEGER, + awakening INTEGER, + use_count INTEGER, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_extend ( + id INTEGER, + select_music_id INTEGER, + select_difficulty_id INTEGER, + category_index INTEGER, + music_index INTEGER, + extra_flag INTEGER, + select_score_type INTEGER, + extend_content_bit BIGINT, + is_photo_agree BOOLEAN, + is_goto_code_read BOOLEAN, + select_result_details BOOLEAN, + sort_category_setting INTEGER, + sort_music_setting INTEGER, + selected_card_list VARCHAR (255), + user_id BIGINT REFERENCES maimai2_user_detail (id), + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_favorite ( + id INTEGER, + fav_user_id BIGINT, + item_kind INTEGER, + item_id_list VARCHAR (255), + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_item ( + id INTEGER, + item_kind INTEGER, + item_id INTEGER, + stock INTEGER, + is_valid BOOLEAN, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_login_bonus ( + id INTEGER, + bonus_id INTEGER, + point INTEGER, + is_current BOOLEAN, + is_complete BOOLEAN, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_map ( + id INTEGER, + map_id INTEGER, + distance INTEGER, + is_lock BOOLEAN, + is_clear BOOLEAN, + is_complete BOOLEAN, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_music_detail ( + id INTEGER, + music_id INTEGER, + level INTEGER, + play_count INTEGER, + achievement INTEGER, + combo_status INTEGER, + sync_status INTEGER, + deluxscore_max INTEGER, + score_rank INTEGER, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_npc_encount ( + id INTEGER, + npc_id INTEGER, + music_id INTEGER, + extend_id BIGINT REFERENCES maimai2_user_extend (id) ON DELETE CASCADE, + user_id BIGINT REFERENCES maimai2_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_option ( + id INTEGER, + option_kind INTEGER, + note_speed INTEGER, + slide_speed INTEGER, + touch_speed INTEGER, + tap_design INTEGER, + hold_design INTEGER, + slide_design INTEGER, + star_type INTEGER, + outline_design INTEGER, + note_size INTEGER, + slide_size INTEGER, + touch_size INTEGER, + star_rotate INTEGER, + disp_center INTEGER, + disp_chain INTEGER, + disp_rate INTEGER, + disp_bar INTEGER, + touch_effect INTEGER, + submonitor_animation INTEGER, + submonitor_achive INTEGER, + submonitor_appeal INTEGER, + matching INTEGER, + track_skip INTEGER, + brightness INTEGER, + mirror_mode INTEGER, + disp_judge INTEGER, + disp_judge_pos INTEGER, + disp_judge_touch_pos INTEGER, + adjust_timing INTEGER, + ans_volume INTEGER, + tap_hold_volume INTEGER, + critical_se INTEGER, + break_se INTEGER, + break_volume INTEGER, + ex_se INTEGER, + ex_volume INTEGER, + slide_se INTEGER, + slide_volume INTEGER, + touch_hold_volume INTEGER, + damage_se_volume INTEGER, + head_phone_volume INTEGER, + sort_tab INTEGER, + sort_music INTEGER, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + + +CREATE TABLE maimai2_user_rate ( + id INTEGER, + music_id INTEGER, + level INTEGER, + rom_version INTEGER, + achievement INTEGER, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +); + +CREATE TABLE maimai2_user_udemae ( + id INTEGER, + rate INTEGER, + max_rate INTEGER, + total_win_num INTEGER, + total_lose_num INTEGER, + max_win_num INTEGER, + max_lose_num INTEGER, + win_num INTEGER, + lose_num INTEGER, + npc_total_win_num INTEGER, + npc_total_lose_num INTEGER, + npc_max_win_num INTEGER, + npc_max_lose_num INTEGER, + npc_win_num INTEGER, + npc_lose_num INTEGER, + user_id BIGINT REFERENCES maimai2_user_detail (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ) +);