[general] Refactoring chunithm UpsertUserAll request and some clean up

This commit is contained in:
samnyan
2020-03-28 22:23:22 +09:00
parent 9a4ca3a612
commit 528b2f8b4d
70 changed files with 310 additions and 241 deletions

View File

@@ -128,7 +128,7 @@ public class ChuniServletController {
/**
* The game start up request
*
* @return
* @return json of GameSetting object
*/
@PostMapping("GetGameSettingApi")
String getGameSetting(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {

View File

@@ -14,7 +14,6 @@ import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.stream.Collectors;
/**
* Response:

View File

@@ -2,7 +2,7 @@ package icu.samnyan.aqua.sega.chunithm.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler;
import icu.samnyan.aqua.sega.chunithm.model.response.data.UserRecentRating;
import icu.samnyan.aqua.sega.general.model.response.UserRecentRating;
import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog;
import icu.samnyan.aqua.sega.chunithm.service.UserPlaylogService;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;

View File

@@ -2,6 +2,7 @@ package icu.samnyan.aqua.sega.chunithm.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler;
import icu.samnyan.aqua.sega.chunithm.model.requet.UpsertUserAll;
import icu.samnyan.aqua.sega.chunithm.model.response.CodeResp;
import icu.samnyan.aqua.sega.chunithm.model.userdata.*;
import icu.samnyan.aqua.sega.chunithm.service.*;
@@ -67,21 +68,20 @@ public class UpsertUserAllHandler implements BaseHandler {
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = (String) request.get("userId");
Map<String, Object> upsertUserAll = (Map<String, Object>) request.get("upsertUserAll");
UpsertUserAll upsertUserAll = mapper.convert(request.get("upsertUserAll"), UpsertUserAll.class);
// Not all field will be sent. Check if they are exist first.
UserData userData;
UserData newUserData;
// UserData
if (!upsertUserAll.containsKey("userData")) {
if (upsertUserAll.getUserData() == null) {
return null;
} else {
Map<String, Object> userDataMap = ((List<Map<String, Object>>) upsertUserAll.get("userData")).get(0);
newUserData = upsertUserAll.getUserData().get(0);
Optional<UserData> userOptional = userDataService.getUserByExtId(userId);
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
@@ -90,9 +90,6 @@ public class UpsertUserAllHandler implements BaseHandler {
userData.setCard(card);
}
// Map the map to object
newUserData = mapper.convert(userDataMap, UserData.class);
newUserData.setId(userData.getId());
newUserData.setCard(userData.getCard());
@@ -107,30 +104,26 @@ public class UpsertUserAllHandler implements BaseHandler {
}
// userGameOption
if (upsertUserAll.containsKey("userGameOption")) {
Map<String, Object> userGameOptionMap = ((List<Map<String, Object>>) upsertUserAll.get("userGameOption")).get(0);
if (upsertUserAll.getUserGameOption() != null) {
UserGameOption newUserGameOption = upsertUserAll.getUserGameOption().get(0);
Optional<UserGameOption> userGameOptionOptional = userGameOptionService.getByUser(newUserData);
UserGameOption userGameOption = userGameOptionOptional.orElseGet(() -> new UserGameOption(newUserData));
UserGameOption newUserGameOption = mapper.convert(userGameOptionMap, UserGameOption.class);
newUserGameOption.setId(userGameOption.getId());
newUserGameOption.setUser(userGameOption.getUser());
userGameOptionService.save(newUserGameOption);
}
// userGameOptionEx
if (upsertUserAll.containsKey("userGameOptionEx")) {
Map<String, Object> userGameOptionExMap = ((List<Map<String, Object>>) upsertUserAll.get("userGameOptionEx")).get(0);
if (upsertUserAll.getUserGameOptionEx() != null) {
UserGameOptionEx newUserGameOptionEx = upsertUserAll.getUserGameOptionEx().get(0);
Optional<UserGameOptionEx> userGameOptionExOptional = userGameOptionExService.getByUser(newUserData);
UserGameOptionEx userGameOptionEx = userGameOptionExOptional.orElseGet(() -> new UserGameOptionEx(newUserData));
UserGameOptionEx newUserGameOptionEx = mapper.convert(userGameOptionExMap, UserGameOptionEx.class);
newUserGameOptionEx.setId(userGameOptionEx.getId());
newUserGameOptionEx.setUser(userGameOptionEx.getUser());
@@ -138,43 +131,35 @@ public class UpsertUserAllHandler implements BaseHandler {
}
// userMapList
if (upsertUserAll.containsKey("userMapList")) {
if (upsertUserAll.getUserMapList() != null) {
List<UserMap> userMapList = upsertUserAll.getUserMapList();
Map<Integer, UserMap> newUserMapMap = new HashMap<>();
int mapPos = 0;
List<Map<String, Object>> userMapList = (List<Map<String, Object>>) upsertUserAll.get("userMapList");
Map<String, UserMap> newUserMapMap = new HashMap<>();
userMapList.forEach(userMapListMap -> {
String mapId = (String) userMapListMap.get("mapId");
userMapList.forEach(newUserMap -> {
int mapId = newUserMap.getMapId();
UserMap userMap;
Optional<UserMap> userMapOptional = userMapService.getByUserAndMapId(newUserData, mapId);
userMap = userMapOptional.orElseGet(() -> new UserMap(newUserData));
UserMap newUserMap = mapper.convert(userMapListMap, UserMap.class);
newUserMap.setId(userMap.getId());
newUserMap.setUser(userMap.getUser());
newUserMapMap.put(mapId, newUserMap);
});
userMapService.saveAll(newUserMapMap.values());
}
// userCharacterList
if (upsertUserAll.containsKey("userCharacterList")) {
if (upsertUserAll.getUserCharacterList() != null) {
List<UserCharacter> userCharacterList = upsertUserAll.getUserCharacterList();
Map<Integer, UserCharacter> newCharacterMap = new HashMap<>();
List<Map<String, Object>> userCharacterList = (List<Map<String, Object>>) upsertUserAll.get("userCharacterList");
Map<String, UserCharacter> newCharacterMap = new HashMap<>();
userCharacterList.forEach(userCharacterMap -> {
String characterId = (String) userCharacterMap.get("characterId");
userCharacterList.forEach(newUserCharacter -> {
int characterId = newUserCharacter.getCharacterId();
Optional<UserCharacter> userCharacterOptional = userCharacterService.getByUserAndCharacterId(newUserData, characterId);
UserCharacter userCharacter = userCharacterOptional.orElseGet(() -> new UserCharacter(newUserData));
UserCharacter newUserCharacter = mapper.convert(userCharacterMap, UserCharacter.class);
newUserCharacter.setId(userCharacter.getId());
newUserCharacter.setUser(userCharacter.getUser());
@@ -184,20 +169,18 @@ public class UpsertUserAllHandler implements BaseHandler {
}
// userItemList
if (upsertUserAll.containsKey("userItemList")) {
List<Map<String, Object>> userItemList = (List<Map<String, Object>>) upsertUserAll.get("userItemList");
if (upsertUserAll.getUserItemList() != null) {
List<UserItem> userItemList = upsertUserAll.getUserItemList();
Map<String, UserItem> newUserItemMap = new HashMap<>();
userItemList.forEach(userItemMap -> {
String itemId = (String) userItemMap.get("itemId");
String itemKind = (String) userItemMap.get("itemKind");
userItemList.forEach(newUserItem -> {
int itemId = newUserItem.getItemId();
int itemKind = newUserItem.getItemKind();
Optional<UserItem> userItemOptional = userItemService.getByUserAndItemId(newUserData, itemId, itemKind);
Optional<UserItem> userItemOptional = userItemService.getByUserAndItemIdAndKind(newUserData, itemId, itemKind);
UserItem userItem = userItemOptional.orElseGet(() -> new UserItem(newUserData));
UserItem newUserItem = mapper.convert(userItemMap, UserItem.class);
newUserItem.setId(userItem.getId());
newUserItem.setUser(userItem.getUser());
@@ -207,100 +190,92 @@ public class UpsertUserAllHandler implements BaseHandler {
}
// userMusicDetailList
if (upsertUserAll.containsKey("userMusicDetailList")) {
if (upsertUserAll.getUserMusicDetailList() != null) {
List<Map<String, Object>> userMusicDetailList = (List<Map<String, Object>>) upsertUserAll.get("userMusicDetailList");
List<UserMusicDetail> userMusicDetailList = upsertUserAll.getUserMusicDetailList();
Map<String, UserMusicDetail> newUserMusicDetailMap = new HashMap<>();
userMusicDetailList.forEach(userMusicDetailMap -> {
String musicId = (String) userMusicDetailMap.get("musicId");
String level = (String) userMusicDetailMap.get("level");
userMusicDetailList.forEach(newUserMusicDetail -> {
int musicId = newUserMusicDetail.getMusicId();
int level = newUserMusicDetail.getLevel();
Optional<UserMusicDetail> userMusicDetailOptional = userMusicDetailService.getByUserAndMusicIdAndLevel(newUserData, musicId, level);
UserMusicDetail userMusicDetail = userMusicDetailOptional.orElseGet(() -> new UserMusicDetail(newUserData));
UserMusicDetail newUserMusicDetail = mapper.convert(userMusicDetailMap, UserMusicDetail.class);
newUserMusicDetail.setId(userMusicDetail.getId());
newUserMusicDetail.setUser(userMusicDetail.getUser());
newUserMusicDetailMap.put(musicId + "," + level, newUserMusicDetail);
newUserMusicDetailMap.put(musicId + "-" + level, newUserMusicDetail);
});
userMusicDetailService.saveAll(newUserMusicDetailMap.values());
}
// userActivityList
if (upsertUserAll.containsKey("userActivityList")) {
if (upsertUserAll.getUserActivityList() != null) {
List<UserActivity> userActivityList = upsertUserAll.getUserActivityList();
List<UserActivity> newUserActivityList = new LinkedList<>();
List<Map<String, Object>> userActivityList = (List<Map<String, Object>>) upsertUserAll.get("userActivityList");
userActivityList.forEach(userActivityMap -> {
userActivityList.forEach(newUserActivity -> {
// No need to rename to activityId. jackson auto handle that
String activityId = (String) userActivityMap.get("id");
String kind = (String) userActivityMap.get("kind");
int activityId = newUserActivity.getActivityId();
int kind = newUserActivity.getKind();
Optional<UserActivity> userActivityOptional = userActivityService.getByUserAndActivityIdAndKind(newUserData, activityId, kind);
UserActivity userActivity = userActivityOptional.orElseGet(() -> new UserActivity(newUserData));
UserActivity newUserActivity = mapper.convert(userActivityMap, UserActivity.class);
newUserActivity.setId(userActivity.getId());
newUserActivity.setUser(userActivity.getUser());
userActivityService.save(newUserActivity);
newUserActivityList.add(newUserActivity);
});
userActivityService.saveAll(newUserActivityList);
}
// userRecentRatingList
// userChargeList
if (upsertUserAll.containsKey("userChargeList")) {
List<Map<String, Object>> userChargeList = (List<Map<String, Object>>) upsertUserAll.get("userChargeList");
if (upsertUserAll.getUserChargeList() != null) {
List<UserCharge> userChargeList = upsertUserAll.getUserChargeList();
List<UserCharge> newUserChargeList = new ArrayList<>();
userChargeList.forEach(userChargeMap -> {
String chargeId = (String) userChargeMap.get("chargeId");
userChargeList.forEach(newUserCharge -> {
int chargeId = newUserCharge.getChargeId();
Optional<UserCharge> userChargeOptional = userChargeService.getByUserAndChargeId(newUserData, chargeId);
UserCharge userCharge = userChargeOptional.orElseGet(() -> new UserCharge(newUserData));
UserCharge newUserCharge = mapper.convert(userChargeMap, UserCharge.class);
newUserCharge.setId(userCharge.getId());
newUserCharge.setUser(userCharge.getUser());
newUserChargeList.add(newUserCharge);
});
userChargeService.saveAll(newUserChargeList);
}
// userPlaylogList
if (upsertUserAll.containsKey("userPlaylogList")) {
List<Map<String, Object>> userPlaylogList = (List<Map<String, Object>>) upsertUserAll.get("userPlaylogList");
if (upsertUserAll.getUserPlaylogList() != null) {
List<UserPlaylog> userPlaylogList = upsertUserAll.getUserPlaylogList();
List<UserPlaylog> newUserPlaylogList = new ArrayList<>();
userPlaylogList.forEach(userPlayLogMap -> {
UserPlaylog newUserPlaylog = mapper.convert(userPlayLogMap, UserPlaylog.class);
userPlaylogList.forEach(newUserPlaylog -> {
newUserPlaylog.setUser(newUserData);
newUserPlaylogList.add(newUserPlaylog);
});
if (newUserPlaylogList.size() > 0) userPlaylogService.saveAll(newUserPlaylogList);
}
// userCourseList
if (upsertUserAll.containsKey("userCourseList")) {
List<Map<String, Object>> userCourseList = (List<Map<String, Object>>) upsertUserAll.get("userCourseList");
if (upsertUserAll.getUserCourseList() != null) {
List<UserCourse> userCourseList = upsertUserAll.getUserCourseList();
userCourseList.forEach(userCourseMap -> {
String courseId = (String) userCourseMap.get("courseId");
userCourseList.forEach(newUserCourse -> {
int courseId = newUserCourse.getCourseId();
Optional<UserCourse> userCourseOptional = userCourseService.getByUserAndCourseId(newUserData, courseId);
UserCourse userCourse = userCourseOptional.orElseGet(() -> new UserCourse(newUserData));
UserCourse newUserCourse = mapper.convert(userCourseMap, UserCourse.class);
newUserCourse.setId(userCourse.getId());
newUserCourse.setUser(userCourse.getUser());
@@ -310,13 +285,12 @@ public class UpsertUserAllHandler implements BaseHandler {
// userDataEx
if (upsertUserAll.containsKey("userDataEx")) {
Map<String, Object> userDataExMap = ((List<Map<String, Object>>) upsertUserAll.get("userDataEx")).get(0);
if (upsertUserAll.getUserDataEx() != null) {
UserDataEx newUserDataEx = upsertUserAll.getUserDataEx().get(0);
Optional<UserDataEx> userDataExOptional = userDataExService.getByUser(newUserData);
UserDataEx userDataEx = userDataExOptional.orElseGet(() -> new UserDataEx(newUserData));
UserDataEx newUserDataEx = mapper.convert(userDataExMap, UserDataEx.class);
newUserDataEx.setId(userDataEx.getId());
newUserDataEx.setUser(userDataEx.getUser());
@@ -324,23 +298,21 @@ public class UpsertUserAllHandler implements BaseHandler {
}
// userDuelList
if (upsertUserAll.containsKey("userDuelList")) {
if (upsertUserAll.getUserDuelList() != null) {
List<UserDuel> userDuelList = upsertUserAll.getUserDuelList();
Map<Integer, UserDuel> newUserDuelMap = new HashMap<>();
List<Map<String, Object>> userDuelList = (List<Map<String, Object>>) upsertUserAll.get("userDuelList");
Map<String, UserDuel> newUserDuelMap = new HashMap<>();
userDuelList.forEach(userDuelMap -> {
String duelId = (String) userDuelMap.get("duelId");
userDuelList.forEach(newUserDuel -> {
int duelId = newUserDuel.getDuelId();
Optional<UserDuel> userDuelOptional = userDuelService.getByUserAndDuelId(newUserData, duelId);
UserDuel userDuel = userDuelOptional.orElseGet(() -> new UserDuel(newUserData));
UserDuel newUserDuel = mapper.convert(userDuelMap, UserDuel.class);
newUserDuel.setId(userDuel.getId());
newUserDuel.setUser(userDuel.getUser());
newUserDuelMap.put(duelId, newUserDuel);
});
userDuelService.saveAll(newUserDuelMap.values());
}

View File

@@ -42,7 +42,7 @@ public class UpsertUserChargelogHandler implements BaseHandler {
String chargeId = (String) userChargeMap.get("chargeId");
UserCharge charge = mapper.convert(userChargeMap, UserCharge.class);
UserCharge userCharge = userChargeService.getByUserAndChargeId(user, chargeId).orElseGet(() -> new UserCharge(user));
UserCharge userCharge = userChargeService.getByUserAndChargeId(user, Integer.parseInt(chargeId)).orElseGet(() -> new UserCharge(user));
userCharge.setChargeId(charge.getChargeId());
userCharge.setStock(charge.getStock());
userCharge.setPurchaseDate(charge.getPurchaseDate());

View File

@@ -0,0 +1,88 @@
package icu.samnyan.aqua.sega.chunithm.model.requet;
import com.fasterxml.jackson.annotation.JsonProperty;
import icu.samnyan.aqua.sega.chunithm.model.userdata.*;
import icu.samnyan.aqua.sega.general.model.response.UserRecentRating;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;
import java.io.Serializable;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UpsertUserAll implements Serializable {
@Nullable
private List<UserData> userData;
@Nullable
private List<UserGameOption> userGameOption;
@Nullable
private List<UserGameOptionEx> userGameOptionEx;
@Nullable
private List<UserMap> userMapList;
@Nullable
private List<UserCharacter> userCharacterList;
@Nullable
private List<UserItem> userItemList;
@Nullable
private List<UserMusicDetail> userMusicDetailList;
@Nullable
private List<UserActivity> userActivityList;
@Nullable
private List<UserRecentRating> userRecentRatingList;
@Nullable
private List<UserCharge> userChargeList;
@Nullable
private List<UserPlaylog> userPlaylogList;
@Nullable
private List<UserCourse> userCourseList;
@Nullable
private List<UserDataEx> userDataEx;
@Nullable
private List<UserDuel> userDuelList;
@Nullable
@JsonProperty("isNewMapList")
private String isNewMapList;
@Nullable
@JsonProperty("isNewCharacterList")
private String isNewCharacterList;
@Nullable
@JsonProperty("isNewMusicDetailList")
private String isNewMusicDetailList;
@Nullable
@JsonProperty("isNewItemList")
private String isNewItemList;
@Nullable
@JsonProperty("isNewCourseList")
private String isNewCourseList;
@Nullable
@JsonProperty("isNewDuelList")
private String isNewDuelList;
}

View File

@@ -1,18 +0,0 @@
package icu.samnyan.aqua.sega.chunithm.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserRecentRating {
private int musicId;
private int difficultId;
private String romVersionCode;
private int score;
}

View File

@@ -30,8 +30,8 @@ public class UserActivityService {
return userActivityRepository.saveAll(userActivityList);
}
public Optional<UserActivity> getByUserAndActivityIdAndKind(UserData user, String activityId, String kind) {
return userActivityRepository.findTopByUserAndActivityIdAndKindOrderByIdDesc(user, Integer.parseInt(activityId), Integer.parseInt(kind));
public Optional<UserActivity> getByUserAndActivityIdAndKind(UserData user, int activityId, int kind) {
return userActivityRepository.findTopByUserAndActivityIdAndKindOrderByIdDesc(user, activityId, kind);
}
public List<UserActivity> getAllByUserIdAndKind(String userId, String kind) {

View File

@@ -42,10 +42,6 @@ public class UserCharacterService {
return userCharacterRepository.findByUser_Card_ExtId(Integer.parseInt(userId), pageable);
}
public Optional<UserCharacter> getByUserAndCharacterId(UserData user, String characterId) {
return getByUserAndCharacterId(user, Integer.parseInt(characterId));
}
public Optional<UserCharacter> getByUserAndCharacterId(UserData user, int characterId) {
return userCharacterRepository.findTopByUserAndCharacterIdOrderByIdDesc(user, characterId);
}

View File

@@ -32,8 +32,8 @@ public class UserChargeService {
return userChargeRepository.findByUser_Card_ExtId(Integer.parseInt(userId));
}
public Optional<UserCharge> getByUserAndChargeId(UserData user, String chargeId) {
return userChargeRepository.findByUserAndChargeId(user, Integer.parseInt(chargeId));
public Optional<UserCharge> getByUserAndChargeId(UserData user, int chargeId) {
return userChargeRepository.findByUserAndChargeId(user, chargeId);
}
}

View File

@@ -42,7 +42,7 @@ public class UserCourseService {
return userCourseRepository.findByUser_Card_ExtId(Integer.parseInt(userId), page);
}
public Optional<UserCourse> getByUserAndCourseId(UserData user, String courseId) {
return userCourseRepository.findTopByUserAndCourseIdOrderByIdDesc(user, Integer.parseInt(courseId));
public Optional<UserCourse> getByUserAndCourseId(UserData user, int courseId) {
return userCourseRepository.findTopByUserAndCourseIdOrderByIdDesc(user, courseId);
}
}

View File

@@ -22,8 +22,8 @@ public class UserDuelService {
this.userDuelRepository = userDuelRepository;
}
public Optional<UserDuel> getByUserAndDuelId(UserData user, String duelId) {
return userDuelRepository.findTopByUserAndDuelIdOrderByIdDesc(user, Integer.parseInt(duelId));
public Optional<UserDuel> getByUserAndDuelId(UserData user, int duelId) {
return userDuelRepository.findTopByUserAndDuelIdOrderByIdDesc(user, duelId);
}
public UserDuel save(UserDuel userDuel) {

View File

@@ -36,8 +36,8 @@ public class UserItemService {
return userItemRepository.findAllByUser_Card_ExtId(Integer.parseInt(userId));
}
public Optional<UserItem> getByUserAndItemId(UserData user, String itemId, String itemKind) {
return userItemRepository.findTopByUserAndItemIdAndItemKindOrderByIdDesc(user, Integer.parseInt(itemId), Integer.parseInt(itemKind));
public Optional<UserItem> getByUserAndItemIdAndKind(UserData user, int itemId, int itemKind) {
return userItemRepository.findTopByUserAndItemIdAndItemKindOrderByIdDesc(user, itemId, itemKind);
}
public Page<UserItem> getByUserAndItemKind(String userId, int kind, int pageNumber, int maxCount) {

View File

@@ -38,7 +38,7 @@ public class UserMapService {
return userMapRepository.findAllByUser_Card_ExtId(Integer.parseInt(userId));
}
public Optional<UserMap> getByUserAndMapId(UserData user, String mapId) {
return userMapRepository.findTopByUserAndMapIdOrderByIdDesc(user, Integer.parseInt(mapId));
public Optional<UserMap> getByUserAndMapId(UserData user, int mapId) {
return userMapRepository.findTopByUserAndMapIdOrderByIdDesc(user, mapId);
}
}

View File

@@ -50,7 +50,7 @@ public class UserMusicDetailService {
return userMusicDetailRepository.findByUser_Card_ExtIdAndMusicId(Integer.parseInt(userId), musicId);
}
public Optional<UserMusicDetail> getByUserAndMusicIdAndLevel(UserData user, String musicId, String level) {
return userMusicDetailRepository.findTopByUserAndMusicIdAndLevelOrderByIdDesc(user, Integer.parseInt(musicId), Integer.parseInt(level));
public Optional<UserMusicDetail> getByUserAndMusicIdAndLevel(UserData user, int musicId, int level) {
return userMusicDetailRepository.findTopByUserAndMusicIdAndLevelOrderByIdDesc(user, musicId, level);
}
}