[maimai2] Add dx support

This commit is contained in:
Dom Eori
2021-06-16 00:37:31 +09:00
parent 235939fba3
commit 9fa2d13c98
70 changed files with 3593 additions and 4 deletions

View File

@@ -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();
}
}

View File

@@ -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();

View File

@@ -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 + "/";
}

View File

@@ -28,6 +28,7 @@ public class CompressionFilter extends OncePerRequestFilter {
filterList.add("/ChuniServlet");
filterList.add("/OngekiServlet");
filterList.add("/MaimaiServlet");
filterList.add("/Maimai2Servlet");
}
@Override

View File

@@ -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<String, Object> request) throws JsonProcessingException {
return getGameEventHandler.handle(request);
}
@PostMapping("GetGameRankingApi")
public String getGameRanking(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameRankingHandler.handle(request);
}
@PostMapping("GetGameSettingApi")
public String getGameSetting(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameSettingHandler.handle(request);
}
@PostMapping("GetGameTournamentInfoApi")
public String getGameTournamentInfoHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameTournamentInfoHandler.handle(request);
}
// Gameplay
@PostMapping("GetTransferFriendApi")
public String getTransferFriendHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getTransferFriendHandler.handle(request);
}
@PostMapping("GetUserActivityApi")
public String getUserActivityHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserActivityHandler.handle(request);
}
// maybe releated DX Pass? return empty
@PostMapping("GetUserCardApi")
public String getUserCardHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserCardHandler.handle(request);
}
@PostMapping("GetUserCharacterApi")
public String getUserCharacterHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserCharacterHandler.handle(request);
}
@PostMapping("GetUserDataApi")
public String getUserDataHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserDataHandler.handle(request);
}
@PostMapping("GetUserExtendApi")
public String getUserExtendHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserExtendHandler.handle(request);
}
@PostMapping("GetUserFavoriteApi")
public String getUserFavoriteHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserFavoriteHandler.handle(request);
}
// No support, return empty
@PostMapping("GetUserGhostApi")
public String getUserGhostHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserGhostHandler.handle(request);
}
@PostMapping("GetUserItemApi")
public String getUserItemHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserItemHandler.handle(request);
}
@PostMapping("GetUserLoginBonusApi")
public String getUserLoginBonusHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserLoginBonusHandler.handle(request);
}
@PostMapping("GetUserMapApi")
public String getUserMapHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserMapHandler.handle(request);
}
@PostMapping("GetUserMusicApi")
public String getUserMusicHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserMusicHandler.handle(request);
}
@PostMapping("GetUserOptionApi")
public String getUserOptionHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserOptionHandler.handle(request);
}
// No support
@PostMapping("GetUserPortraitApi")
public String getUserPortraitHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return "{\"length\":0,\"userPortraitList\":[]}";
}
@PostMapping("GetUserPreviewApi")
public String getUserPreviewHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserPreviewHandler.handle(request);
}
@PostMapping("GetUserRatingApi")
public String getUserRatingHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserRatingHandler.handle(request);
}
// I don't know what it is. return empty
@PostMapping("GetUserRegionApi")
public String getUserRegionHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserRegionHandler.handle(request);
}
// Seems only used for tournament, No Support
@PostMapping("GetUserScoreRankingApi")
public String getUserScoreRankingHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return "{}";
}
// No support
@PostMapping("UploadUserPhotoApi")
public String uploadUserPhotoHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UploadUserPhotoApi\"}";
}
@PostMapping("UploadUserPlaylogApi")
public String uploadUserPlaylogHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UploadUserPlaylogApi\"}";
}
// No support, return error code
@PostMapping("UploadUserPortraitApi")
public String uploadUserPortraitHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return "{\"returnCode\":-1,\"apiName\":\"com.sega.maimai2servlet.api.UploadUserPortraitApi\"}";
}
@PostMapping("UserLoginApi")
public String userLoginHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return userLoginHandler.handle(request);
}
@PostMapping("UserLogoutApi")
public String userLogoutHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return userLogoutHandler.handle(request);
}
@PostMapping("UpsertClientBookkeepingApi")
public String upsertClientBookkeeping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientBookkeepingApi\"}";
}
@PostMapping("UpsertClientSettingApi")
public String upsertClientSetting(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientSettingApi\"}";
}
@PostMapping("UpsertClientTestmodeApi")
public String upsertClientTestmode(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientTestmodeApi\"}";
}
@PostMapping("UpsertClientUploadApi")
public String upsertClientUpload(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertClientUploadApi\"}";
}
// Score saving
@PostMapping("UpsertUserAllApi")
public String upsertUserAllHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return upsertUserAllHandler.handle(request);
}
}

View File

@@ -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<String, Object> 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<>() {
});
}
}

View File

@@ -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<MapEncountNpc, Long> {
Optional<MapEncountNpc> findByUserAndMusicId(UserDetail user, int musicId);
Page<MapEncountNpc> findByUser_Card_ExtIdAndMusicId(long userId, int musicId, Pageable page);
}

View File

@@ -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<UserAct, Long> {
Optional<UserAct> findByUserAndKindAndActivityId(UserDetail user, int kind, int id);
List<UserAct> findByUser_Card_ExtIdAndKind(long userId, int kind);
}

View File

@@ -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<UserCharacter, Long> {
List<UserCharacter> findByUser_Card_ExtId(long userId);
Optional<UserCharacter> findByUserAndCharacterId(UserDetail user, int characterId);
}

View File

@@ -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<UserDetail, Long> {
Optional<UserDetail> findByCard_ExtId(long userId);
}

View File

@@ -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<UserExtend, Long> {
Optional<UserExtend> findByUser(UserDetail user);
Optional<UserExtend> findByUser_Card_ExtId(Long extId);
}

View File

@@ -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<UserFavorite, Long> {
Optional<UserFavorite> findByUserAndItemKind(UserDetail user, int kind);
//Optional<UserFavorite> findByUserIdAndItemKind(long userId, int kind);
List<UserFavorite> findByUserIdAndItemKind(long userId, int kind);
}

View File

@@ -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<UserItem, Long> {
Optional<UserItem> findByUserAndItemKindAndItemId(UserDetail user, int itemKind, int itemId);
Page<UserItem> findByUser_Card_ExtIdAndItemKind(long userId, int kind, Pageable page);
}

View File

@@ -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<UserLoginBonus, Long> {
Optional<UserLoginBonus> findByUserAndBonusId(UserDetail user, int bonusId);
Page<UserLoginBonus> findByUser_Card_ExtId(long userId, Pageable page);
}

View File

@@ -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<UserMap, Long> {
Optional<UserMap> findByUserAndMapId(UserDetail user, int mapId);
Page<UserMap> findByUser_Card_ExtId(long userId, Pageable page);
}

View File

@@ -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<UserMusicDetail, Long> {
Optional<UserMusicDetail> findByUserAndMusicIdAndLevel(UserDetail user, int musicId, int level);
Page<UserMusicDetail> findByUser_Card_ExtId(long userId, Pageable page);
}

View File

@@ -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<UserOption, Long> {
Optional<UserOption> findByUser(UserDetail user);
Optional<UserOption> findByUser_Card_ExtId(Long extId);
}

View File

@@ -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<UserRate, Long> {
Optional<UserRate> findByUserAndMusicId(UserDetail user, int musicId);
List<UserRate> findByUser_Card_ExtId(long userId);
}

View File

@@ -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<UserUdemae, Long> {
Optional<UserUdemae> findByUser(UserDetail user);
Optional<UserUdemae> findByUser_Card_ExtId(Long extId);
}

View File

@@ -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<String, Object> request) throws JsonProcessingException;
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
String type = Integer.toString((int) request.get("type"));
List<Object> gameEventList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("type", type);
resultMap.put("gameEventList", gameEventList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
String type = Integer.toString((int) request.get("type"));
List<Object> gameRankingList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("type", type);
resultMap.put("gameRankingList", gameRankingList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> 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;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
List<Object> gameTournamentInfoList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", 0);
resultMap.put("gameTournamentInfoList", gameTournamentInfoList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
int userId = (int) request.get("userId");
List<Object> transferFriendList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("transferFriendList", transferFriendList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
// kind 1 = playList, kind 2 = musicList
// maimaiDX require these two
List<UserAct> userPlayList = userActRepository.findByUser_Card_ExtIdAndKind(userId, 1);
List<UserAct> userMusicList = userActRepository.findByUser_Card_ExtIdAndKind(userId, 2);
UserActivity userActivity = new UserActivity();
userActivity.setMusicList(userMusicList);
userActivity.setPlayList(userPlayList);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userActivity", userActivity);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
List<Object> userCardList = new ArrayList<>();
Map<String, Object> 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;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
List<UserCharacter> userCharacterList = userCharacterRepository.findByUser_Card_ExtId(userId);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userCharacterList", userCharacterList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
UserDetail userData = userDataRepository.findByCard_ExtId(userId).orElseThrow();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userData", userData);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
UserExtend userExtend = userExtendRepository.findByUser_Card_ExtId(userId).orElseThrow();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userExtend", userExtend);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
int itemKind = ((Number) request.get("itemKind")).intValue();
List<UserFavorite> userFavoriteList = userFavoriteRepository.findByUserIdAndItemKind(userId, itemKind);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userFavoriteData", userFavoriteList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
List<Object> userGhostList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userGhostList", userGhostList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> 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<UserItem> dbPage = userItemRepository.findByUser_Card_ExtIdAndItemKind(userId, kind, PageRequest.of(pageNum, maxCount));
long currentIndex = kind * mul + maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> 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;
}
}

View File

@@ -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<String, Object> 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<UserLoginBonus> dbPage = userLoginBonusRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount));
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> 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;
}
}

View File

@@ -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<String, Object> 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<UserMap> dbPage = userMapRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount));
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> 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;
}
}

View File

@@ -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<String, Object> 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<UserMusicDetail> dbPage = userMusicDetailRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount));
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex);
UserMusic userMusic = new UserMusic();
userMusic.setUserMusicDetailList(dbPage.getContent());
List<UserMusic> userMusicList = new ArrayList<>();
userMusicList.add(userMusic);
resultMap.put("userMusicList", userMusicList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
UserOption userOption = userOptionRepository.findByUser_Card_ExtId(userId).orElseThrow();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userOption", userOption);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
Optional<UserDetail> 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<UserOption> 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;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
List<UserRate> userRate = userRateRepository.findByUser_Card_ExtId(userId);
List<UserRate> emptyRating = new ArrayList<>();
UserRating userRating = new UserRating();
Optional<UserDetail> 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<UserUdemae> optionalUserUdemae = userUdemaeRepository.findByUser_Card_ExtId(userId);
if (optionalUserUdemae.isPresent()) {
UserUdemae userUdemae = optionalUserUdemae.get();
userRating.setUdemae(userUdemae);
} else {
userRating.setUdemae(new UserUdemae());
}
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("userRating", userRating);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
List<Object> userRegionList = new ArrayList<>();
Map<String, Object> 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;
}
}

View File

@@ -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<String, Object> 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<UserDetail> 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<UserExtend> 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<UserOption> 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<UserCharacter> userCharacterList = userAll.getUserCharacterList();
List<UserCharacter> newUserCharacterList = new ArrayList<>();
for (UserCharacter newUserCharacter : userCharacterList) {
int id = newUserCharacter.getCharacterId();
Optional<UserCharacter> 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<UserMap> userMapList = userAll.getUserMapList();
List<UserMap> newUserMapList = new ArrayList<>();
for (UserMap newUserMap : userMapList) {
int mapId = newUserMap.getMapId();
Optional<UserMap> 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<UserLoginBonus> userLoginBonusList = userAll.getUserLoginBonusList();
List<UserLoginBonus> newUserLoginBonusList = new ArrayList<>();
for (UserLoginBonus newUserLoginBonus : userLoginBonusList) {
int bonusId = newUserLoginBonus.getBonusId();
Optional<UserLoginBonus> 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<UserUdemae> udemaeOptional = userUdemaeRepository.findByUser(newUserData);
UserUdemae userUdemae = udemaeOptional.orElseGet(() -> new UserUdemae(newUserData));
newUserUdemae.setId(userUdemae.getId());
newUserUdemae.setUser(newUserData);
userUdemaeRepository.saveAndFlush(newUserUdemae);
List<UserRate> userRateList = userRating.getRatingList();
List<UserRate> newUserRateList = new ArrayList<>();
// UserRate
for (UserRate newUserRate : userRateList) {
int musicId = newUserRate.getMusicId();
Optional<UserRate> 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<UserItem> userItemList = userAll.getUserItemList();
List<UserItem> newUserItemList = new ArrayList<>();
for (UserItem newUserItem : userItemList) {
int itemId = newUserItem.getItemId();
int itemKind = newUserItem.getItemKind();
Optional<UserItem> 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<UserMusicDetail> userMusicDetailList = userAll.getUserMusicDetailList();
List<UserMusicDetail> newUserMusicDetailList = new ArrayList<>();
for (UserMusicDetail newUserMusicDetail : userMusicDetailList) {
int musicId = newUserMusicDetail.getMusicId();
int level = newUserMusicDetail.getLevel();
Optional<UserMusicDetail> 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<UserFavorite> userFavoriteList = userAll.getUserFavoriteList();
List<UserFavorite> newUserFavoriteList = new ArrayList<>();
for (UserFavorite newUserFavorite : userFavoriteList) {
int itemKind = newUserFavorite.getItemKind();
Optional<UserFavorite> 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<UserAct> newUserActList = new ArrayList<>();
List<List<UserAct>> activityList = new ArrayList<>();
activityList.add(userActivity.getMusicList());
activityList.add(userActivity.getPlayList());
for (List<UserAct> actList : activityList) {
for (UserAct newUserAct : actList) {
int kind = newUserAct.getKind();
int id = newUserAct.getActivityId();
if (kind != 0 && id != 0) {
Optional<UserAct> 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\"}";
}
}

View File

@@ -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<String, Object> 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;
}
}

View File

@@ -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<String, Object> request) throws JsonProcessingException {
String json = mapper.write(new CodeResp(1));
logger.info("Response: " + json);
return json;
}
}

View File

@@ -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;
}

View File

@@ -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<UserDetail> userData;
public List<UserExtend> userExtend;
public List<UserOption> userOption;
public List<UserCharacter> userCharacterList;
public List<UserGhost> userGhost;
public List<UserMap> userMapList;
public List<UserLoginBonus> userLoginBonusList;
public List<UserRating> userRatingList;
public List<UserItem> userItemList;
public List<UserMusicDetail> userMusicDetailList;
public List<UserFavorite> userFavoriteList;
public List<UserActivity> userActivityList;
public String isNewCharacterList;
public String isNewMapList;
public String isNewLoginBonusList;
public String isNewItemList;
public String isNewMusicDetailList;
public String isNewFavoriteList;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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?
}

View File

@@ -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;
}

View File

@@ -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<UserAct> playList;
private List<UserAct> musicList;
}

View File

@@ -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<UserMusicDetail> userMusicDetailList;
}

View File

@@ -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<UserRate> ratingList;
private List<UserRate> newRatingList;
private List<UserRate> nextRatingList;
private List<UserRate> nextNewRatingList;
private UserUdemae udemae;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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<Integer> charaSlot; // Entries: 5
@Convert(converter = IntegerListConverter.class)
private List<Integer> 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;
}

View File

@@ -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<Integer> selectedCardList;
@OneToMany(mappedBy = "userExtend")
private List<MapEncountNpc> encountMapNpcList = new ArrayList<>();
public UserExtend(UserDetail user) {
this.user = user;
}
}

View File

@@ -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<Integer> itemIdList;
public UserFavorite(UserDetail user) {
this.user = user;
}
}

View File

@@ -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<Byte> resultBitList;
private int resultNum;
private int achievement;
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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<List<Integer>, String> {
private static final String SPLIT_CHAR = ";";
@Override
public String convertToDatabaseColumn(List<Integer> integerList) {
if (integerList != null && !integerList.isEmpty()) {
StringBuilder str = new StringBuilder();
Iterator<Integer> 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<Integer> convertToEntityAttribute(String string) {
if (string != null && !string.isEmpty()) {
List<Integer> iList = new ArrayList<Integer>();
for (String s : string.split(SPLIT_CHAR)) {
iList.add(Integer.parseInt(s));
}
return iList;
} else {
return emptyList();
}
}
}