From 93d80e9439daa0429426533c6b78d35b7f4a55ec Mon Sep 17 00:00:00 2001 From: samnyan <205-neumphis@users.noreply.dev.s-ul.eu> Date: Sun, 23 Aug 2020 15:27:27 +0900 Subject: [PATCH] [ongeki] Add summer support --- .../ongeki/controller/OngekiController.java | 23 +++++++- .../dao/userdata/UserBossRepository.java | 21 +++++++ .../dao/userdata/UserScenarioRepository.java | 21 +++++++ .../dao/userdata/UserTechCountRepository.java | 21 +++++++ .../handler/impl/GetUserBossHandler.java | 52 ++++++++++++++++ .../handler/impl/GetUserScenarioHandler.java | 52 ++++++++++++++++ .../handler/impl/GetUserTechCountHandler.java | 52 ++++++++++++++++ .../handler/impl/UpsertUserAllHandler.java | 59 ++++++++++++++++++- .../ongeki/model/request/UpsertUserAll.java | 6 ++ .../sega/ongeki/model/userdata/UserBoss.java | 44 ++++++++++++++ .../ongeki/model/userdata/UserScenario.java | 40 +++++++++++++ .../ongeki/model/userdata/UserTechCount.java | 42 +++++++++++++ .../mysql/V22__add_ongeki_summer_table.sql | 40 +++++++++++++ .../sqlite/V22__add_ongeki_summer_table.sql | 46 +++++++++++++++ 14 files changed, 517 insertions(+), 2 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserBossRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserScenarioRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechCountRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserBossHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserScenarioHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechCountHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserBoss.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserScenario.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechCount.java create mode 100644 src/main/resources/db/migration/mysql/V22__add_ongeki_summer_table.sql create mode 100644 src/main/resources/db/migration/sqlite/V22__add_ongeki_summer_table.sql diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/controller/OngekiController.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/controller/OngekiController.java index e8afcaa5..65e424cf 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/controller/OngekiController.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/controller/OngekiController.java @@ -27,6 +27,7 @@ public class OngekiController { private final GetGameRewardHandler getGameRewardHandler; private final GetGameSettingHandler getGameSettingHandler; private final GetUserActivityHandler getUserActivityHandler; + private final GetUserBossHandler getUserBossHandler; private final GetUserBpBaseHandler getUserBpBaseHandler; private final GetUserCardHandler getUserCardHandler; private final GetUserChapterHandler getUserChapterHandler; @@ -45,12 +46,14 @@ public class OngekiController { private final GetUserRatinglogListHandler getUserRatinglogListHandler; private final GetUserRecentRatingHandler getUserRecentRatingHandler; private final GetUserRegionHandler getUserRegionHandler; + private final GetUserScenarioHandler getUserScenarioHandler; private final GetUserStoryHandler getUserStoryHandler; + private final GetUserTechCountHandler getUserTechCountHandler; private final GetUserTrainingRoomByKeyHandler getUserTrainingRoomByKeyHandler; private final UpsertUserAllHandler upsertUserAllHandler; @Autowired - public OngekiController(GetGameEventHandler getGameEventHandler, GetGameIdlistHandler getGameIdlistHandler, GetGameMessageHandler getGameMessageHandler, GetGamePointHandler getGamePointHandler, GetGamePresentHandler getGamePresentHandler, GetGameRankingHandler getGameRankingHandler, GetGameRewardHandler getGameRewardHandler, GetGameSettingHandler getGameSettingHandler, GetUserActivityHandler getUserActivityHandler, GetUserBpBaseHandler getUserBpBaseHandler, GetUserCardHandler getUserCardHandler, GetUserChapterHandler getUserChapterHandler, GetUserCharacterHandler getUserCharacterHandler, GetUserDataHandler getUserDataHandler, GetUserDeckByKeyHandler getUserDeckByKeyHandler, GetUserEventPointHandler getUserEventPointHandler, GetUserEventRankingHandler getUserEventRankingHandler, GetUserItemHandler getUserItemHandler, GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMissionPointHandler getUserMissionPointHandler, GetUserMusicHandler getUserMusicHandler, GetUserMusicItemHandler getUserMusicItemHandler, GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler, GetUserRatinglogListHandler getUserRatinglogListHandler, GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler, GetUserStoryHandler getUserStoryHandler, GetUserTrainingRoomByKeyHandler getUserTrainingRoomByKeyHandler, UpsertUserAllHandler upsertUserAllHandler) { + public OngekiController(GetGameEventHandler getGameEventHandler, GetGameIdlistHandler getGameIdlistHandler, GetGameMessageHandler getGameMessageHandler, GetGamePointHandler getGamePointHandler, GetGamePresentHandler getGamePresentHandler, GetGameRankingHandler getGameRankingHandler, GetGameRewardHandler getGameRewardHandler, GetGameSettingHandler getGameSettingHandler, GetUserActivityHandler getUserActivityHandler, GetUserBossHandler getUserBossHandler, GetUserBpBaseHandler getUserBpBaseHandler, GetUserCardHandler getUserCardHandler, GetUserChapterHandler getUserChapterHandler, GetUserCharacterHandler getUserCharacterHandler, GetUserDataHandler getUserDataHandler, GetUserDeckByKeyHandler getUserDeckByKeyHandler, GetUserEventPointHandler getUserEventPointHandler, GetUserEventRankingHandler getUserEventRankingHandler, GetUserItemHandler getUserItemHandler, GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMissionPointHandler getUserMissionPointHandler, GetUserMusicHandler getUserMusicHandler, GetUserMusicItemHandler getUserMusicItemHandler, GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler, GetUserRatinglogListHandler getUserRatinglogListHandler, GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler, GetUserScenarioHandler getUserScenarioHandler, GetUserStoryHandler getUserStoryHandler, GetUserTechCountHandler getUserTechCountHandler, GetUserTrainingRoomByKeyHandler getUserTrainingRoomByKeyHandler, UpsertUserAllHandler upsertUserAllHandler) { this.getGameEventHandler = getGameEventHandler; this.getGameIdlistHandler = getGameIdlistHandler; this.getGameMessageHandler = getGameMessageHandler; @@ -60,6 +63,7 @@ public class OngekiController { this.getGameRewardHandler = getGameRewardHandler; this.getGameSettingHandler = getGameSettingHandler; this.getUserActivityHandler = getUserActivityHandler; + this.getUserBossHandler = getUserBossHandler; this.getUserBpBaseHandler = getUserBpBaseHandler; this.getUserCardHandler = getUserCardHandler; this.getUserChapterHandler = getUserChapterHandler; @@ -78,7 +82,9 @@ public class OngekiController { this.getUserRatinglogListHandler = getUserRatinglogListHandler; this.getUserRecentRatingHandler = getUserRecentRatingHandler; this.getUserRegionHandler = getUserRegionHandler; + this.getUserScenarioHandler = getUserScenarioHandler; this.getUserStoryHandler = getUserStoryHandler; + this.getUserTechCountHandler = getUserTechCountHandler; this.getUserTrainingRoomByKeyHandler = getUserTrainingRoomByKeyHandler; this.upsertUserAllHandler = upsertUserAllHandler; } @@ -143,6 +149,11 @@ public class OngekiController { return getUserActivityHandler.handle(request); } + @PostMapping("GetUserBossApi") + public String getUserBoss(@ModelAttribute Map request) throws JsonProcessingException { + return getUserBossHandler.handle(request); + } + @PostMapping("GetUserBpBaseApi") public String getUserBpBase(@ModelAttribute Map request) throws JsonProcessingException { return getUserBpBaseHandler.handle(request); @@ -232,11 +243,21 @@ public class OngekiController { return getUserRegionHandler.handle(request); } + @PostMapping("GetUserScenarioApi") + public String getUserScenario(@ModelAttribute Map request) throws JsonProcessingException { + return getUserScenarioHandler.handle(request); + } + @PostMapping("GetUserStoryApi") public String getUserStory(@ModelAttribute Map request) throws JsonProcessingException { return getUserStoryHandler.handle(request); } + @PostMapping("GetUserTechCountApi") + public String getUserTechCount(@ModelAttribute Map request) throws JsonProcessingException { + return getUserTechCountHandler.handle(request); + } + @PostMapping("GetUserTrainingRoomByKeyApi") public String getUserTrainingRoomByKey(@ModelAttribute Map request) throws JsonProcessingException { return getUserTrainingRoomByKeyHandler.handle(request); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserBossRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserBossRepository.java new file mode 100644 index 00000000..7e729d6e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserBossRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.ongeki.dao.userdata; + +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserBoss; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; +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("OngekiUserBossRepository") +public interface UserBossRepository extends JpaRepository { + + List findByUser_Card_ExtId(int userId); + + Optional findByUserAndMusicId(UserData user, int musicId); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserScenarioRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserScenarioRepository.java new file mode 100644 index 00000000..e4d7661c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserScenarioRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.ongeki.dao.userdata; + +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserScenario; +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("OngekiUserScenarioRepository") +public interface UserScenarioRepository extends JpaRepository { + + List findByUser_Card_ExtId(int userId); + + Optional findByUserAndScenarioId(UserData user, int scenarioId); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechCountRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechCountRepository.java new file mode 100644 index 00000000..6279b6cc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechCountRepository.java @@ -0,0 +1,21 @@ +package icu.samnyan.aqua.sega.ongeki.dao.userdata; + +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserTechCount; +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("OngekiUserTechCountRepository") +public interface UserTechCountRepository extends JpaRepository { + + List findByUser_Card_ExtId(int userId); + + Optional findByUserAndLevelId(UserData user, int levelId); + +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserBossHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserBossHandler.java new file mode 100644 index 00000000..44d2a7aa --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserBossHandler.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserBossRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserBoss; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("OngekiGetUserBossHandler") +public class GetUserBossHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserBossHandler.class); + + private final BasicMapper mapper; + + private final UserBossRepository userBossRepository; + + @Autowired + public GetUserBossHandler(BasicMapper mapper, UserBossRepository userBossRepository) { + this.mapper = mapper; + this.userBossRepository = userBossRepository; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + Integer userId = (Integer) request.get("userId"); + + List userBossList = userBossRepository.findByUser_Card_ExtId(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userBossList.size()); + resultMap.put("userBossList", userBossList); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserScenarioHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserScenarioHandler.java new file mode 100644 index 00000000..05d82ccc --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserScenarioHandler.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserScenarioRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserScenario; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("OngekiGetUserScenarioHandler") +public class GetUserScenarioHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserScenarioHandler.class); + + private final BasicMapper mapper; + + private final UserScenarioRepository userScenarioRepository; + + @Autowired + public GetUserScenarioHandler(BasicMapper mapper, UserScenarioRepository userScenarioRepository) { + this.mapper = mapper; + this.userScenarioRepository = userScenarioRepository; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + Integer userId = (Integer) request.get("userId"); + + List userScenarioList = userScenarioRepository.findByUser_Card_ExtId(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userScenarioList.size()); + resultMap.put("userScenarioList", userScenarioList); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechCountHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechCountHandler.java new file mode 100644 index 00000000..33cf65d8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechCountHandler.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserTechCountRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserTechCount; +import icu.samnyan.aqua.sega.util.jackson.BasicMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("OngekiGetTechCountHandler") +public class GetUserTechCountHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserTechCountHandler.class); + + private final BasicMapper mapper; + + private final UserTechCountRepository userTechCountRepository; + + @Autowired + public GetUserTechCountHandler(BasicMapper mapper, UserTechCountRepository userTechCountRepository) { + this.mapper = mapper; + this.userTechCountRepository = userTechCountRepository; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + Integer userId = (Integer) request.get("userId"); + + List userTechCountList = userTechCountRepository.findByUser_Card_ExtId(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", userTechCountList.size()); + resultMap.put("userTechCountList", userTechCountList); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/UpsertUserAllHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/UpsertUserAllHandler.java index 50c2eb2a..2852ea98 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/UpsertUserAllHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/UpsertUserAllHandler.java @@ -50,10 +50,13 @@ public class UpsertUserAllHandler implements BaseHandler { private final UserMissionPointRepository userMissionPointRepository; private final UserTrainingRoomRepository userTrainingRoomRepository; private final UserGeneralDataRepository userGeneralDataRepository; + private final UserBossRepository userBossRepository; + private final UserScenarioRepository userScenarioRepository; + private final UserTechCountRepository userTechCountRepository; @Autowired public UpsertUserAllHandler(BasicMapper mapper, - CardService cardService, UserDataRepository userDataRepository, UserOptionRepository userOptionRepository, UserPlaylogRepository userPlaylogRepository, UserActivityRepository userActivityRepository, UserMusicDetailRepository userMusicDetailRepository, UserCharacterRepository userCharacterRepository, UserCardRepository userCardRepository, UserDeckRepository userDeckRepository, UserStoryRepository userStoryRepository, UserChapterRepository userChapterRepository, UserItemRepository userItemRepository, UserMusicItemRepository userMusicItemRepository, UserLoginBonusRepository userLoginBonusRepository, UserEventPointRepository userEventPointRepository, UserMissionPointRepository userMissionPointRepository, UserTrainingRoomRepository userTrainingRoomRepository, UserGeneralDataRepository userGeneralDataRepository) { + CardService cardService, UserDataRepository userDataRepository, UserOptionRepository userOptionRepository, UserPlaylogRepository userPlaylogRepository, UserActivityRepository userActivityRepository, UserMusicDetailRepository userMusicDetailRepository, UserCharacterRepository userCharacterRepository, UserCardRepository userCardRepository, UserDeckRepository userDeckRepository, UserStoryRepository userStoryRepository, UserChapterRepository userChapterRepository, UserItemRepository userItemRepository, UserMusicItemRepository userMusicItemRepository, UserLoginBonusRepository userLoginBonusRepository, UserEventPointRepository userEventPointRepository, UserMissionPointRepository userMissionPointRepository, UserTrainingRoomRepository userTrainingRoomRepository, UserGeneralDataRepository userGeneralDataRepository, UserBossRepository userBossRepository, UserScenarioRepository userScenarioRepository, UserTechCountRepository userTechCountRepository) { this.mapper = mapper; this.cardService = cardService; this.userDataRepository = userDataRepository; @@ -73,6 +76,9 @@ public class UpsertUserAllHandler implements BaseHandler { this.userMissionPointRepository = userMissionPointRepository; this.userTrainingRoomRepository = userTrainingRoomRepository; this.userGeneralDataRepository = userGeneralDataRepository; + this.userBossRepository = userBossRepository; + this.userScenarioRepository = userScenarioRepository; + this.userTechCountRepository = userTechCountRepository; } @Override @@ -393,6 +399,57 @@ public class UpsertUserAllHandler implements BaseHandler { // UserRatinglogList (For the highest rating of each version) + // UserBossList + List userBossList = upsertUserAll.getUserBossList(); + if (userBossList != null) { + List newUserBossList = new ArrayList<>(); + for (UserBoss newUserBoss : userBossList) { + int musicId = newUserBoss.getMusicId(); + + Optional userBossOptional = userBossRepository.findByUserAndMusicId(newUserData, musicId); + UserBoss userBoss = userBossOptional.orElseGet(() -> new UserBoss(newUserData)); + + newUserBoss.setId(userBoss.getId()); + newUserBoss.setUser(userBoss.getUser()); + newUserBossList.add(newUserBoss); + } + userBossRepository.saveAll(newUserBossList); + } + + // UserTechCountList + List userTechCountList = upsertUserAll.getUserTechCountList(); + if (userTechCountList != null) { + List newUserTechCountList = new ArrayList<>(); + for (UserTechCount newUserTechCount : userTechCountList) { + int levelId = newUserTechCount.getLevelId(); + + Optional userTechCountOptional = userTechCountRepository.findByUserAndLevelId(newUserData, levelId); + UserTechCount userTechCount = userTechCountOptional.orElseGet(() -> new UserTechCount(newUserData)); + + newUserTechCount.setId(userTechCount.getId()); + newUserTechCount.setUser(userTechCount.getUser()); + newUserTechCountList.add(newUserTechCount); + } + userTechCountRepository.saveAll(newUserTechCountList); + } + + // UserScenarioList + List userScenarioList = upsertUserAll.getUserScenarioList(); + if (userScenarioList != null) { + List newUserScenarioList = new ArrayList<>(); + for (UserScenario newUserScenario : userScenarioList) { + int scenarioId = newUserScenario.getScenarioId(); + + Optional userScenarioOptional = userScenarioRepository.findByUserAndScenarioId(newUserData, scenarioId); + UserScenario userScenario = userScenarioOptional.orElseGet(() -> new UserScenario(newUserData)); + + newUserScenario.setId(userScenario.getId()); + newUserScenario.setUser(userScenario.getUser()); + newUserScenarioList.add(newUserScenario); + } + userScenarioRepository.saveAll(newUserScenarioList); + } + String json = mapper.write(new CodeResp(1, "upsertUserAll")); logger.info("Response: " + json); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/request/UpsertUserAll.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/request/UpsertUserAll.java index e9ddcc08..53a773cb 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/request/UpsertUserAll.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/request/UpsertUserAll.java @@ -71,6 +71,12 @@ public class UpsertUserAll implements Serializable { private List> userRatinglogList; + private List userBossList; + + private List userTechCountList; + + private List userScenarioList; + @JsonProperty("isNewMusicDetailList") private String isNewMusicDetailList; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserBoss.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserBoss.java new file mode 100644 index 00000000..7a52f0c4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserBoss.java @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.ongeki.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "OngekiUserBoss") +@Table(name = "ongeki_user_boss") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserBoss implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int musicId; + + private int damage; + + @JsonProperty("isClear") + private boolean isClear; + + public UserBoss(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserScenario.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserScenario.java new file mode 100644 index 00000000..56cf3a75 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserScenario.java @@ -0,0 +1,40 @@ +package icu.samnyan.aqua.sega.ongeki.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "OngekiUserScenario") +@Table(name = "ongeki_user_scenario") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserScenario implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int scenarioId; + + private int playCount; + + public UserScenario(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechCount.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechCount.java new file mode 100644 index 00000000..b567447c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechCount.java @@ -0,0 +1,42 @@ +package icu.samnyan.aqua.sega.ongeki.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "OngekiUserTechCount") +@Table(name = "ongeki_user_tech_count") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserTechCount implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @JsonIgnore + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + private int levelId; + + private int allBreakCount; + + private int allBreakPlusCount; + + public UserTechCount(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/resources/db/migration/mysql/V22__add_ongeki_summer_table.sql b/src/main/resources/db/migration/mysql/V22__add_ongeki_summer_table.sql new file mode 100644 index 00000000..f0dd230f --- /dev/null +++ b/src/main/resources/db/migration/mysql/V22__add_ongeki_summer_table.sql @@ -0,0 +1,40 @@ +create table ongeki_user_boss +( + id bigint auto_increment + primary key, + music_id int not null, + damage int not null, + is_clear bit not null, + user_id bigint null, + constraint UKkXe5S9552jrSJP65 + unique (user_id, music_id), + constraint FKRvEJ2eAwDd3br6bv + foreign key (user_id) references ongeki_user_data (id) +); + +create table ongeki_user_scenario +( + id bigint auto_increment + primary key, + scenario_id int not null, + play_count int not null, + user_id bigint null, + constraint UKCovwoDYcZ532HDvs + unique (user_id, scenario_id), + constraint FKFyD2tqndcCe9qQMA + foreign key (user_id) references ongeki_user_data (id) +); + +create table ongeki_user_tech_count +( + id bigint auto_increment + primary key, + level_id int not null, + all_break_count int not null, + all_break_plus_count int not null, + user_id bigint null, + constraint UKvREetXbYLNAtX5G7 + unique (user_id, level_id), + constraint FKkg4dYVKWYr8tGkDk + foreign key (user_id) references ongeki_user_data (id) +); \ No newline at end of file diff --git a/src/main/resources/db/migration/sqlite/V22__add_ongeki_summer_table.sql b/src/main/resources/db/migration/sqlite/V22__add_ongeki_summer_table.sql new file mode 100644 index 00000000..cb47c10a --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V22__add_ongeki_summer_table.sql @@ -0,0 +1,46 @@ +create table ongeki_user_boss +( + id INTEGER, + music_id INTEGER NOT NULL, + damage INTEGER NOT NULL, + is_clear BOOLEAN NOT NULL, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_boss_uq UNIQUE ( + music_id, + user_id + ) ON CONFLICT REPLACE +); + +create table ongeki_user_scenario +( + id INTEGER, + scenario_id INTEGER NOT NULL, + play_count INTEGER NOT NULL, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_scenario_uq UNIQUE ( + scenario_id, + user_id + ) ON CONFLICT REPLACE +); + +create table ongeki_user_tech_count +( + id INTEGER, + level_id INTEGER NOT NULL, + all_break_count INTEGER NOT NULL, + all_break_plus_count INTEGER NOT NULL, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_tech_count_uq UNIQUE ( + level_id, + user_id + ) ON CONFLICT REPLACE +); \ No newline at end of file