From 50cecae272d5dafc4d1c487d07cb471bb325e97a Mon Sep 17 00:00:00 2001 From: Dom Eori <4j6dq2zi8@relay.firefox.com> Date: Fri, 11 Mar 2022 17:37:36 +0900 Subject: [PATCH] [ongeki] Add experimental Bright Memory support --- .../ongeki/controller/OngekiController.java | 37 ++++++++++- .../userdata/UserMemoryChapterRepository.java | 24 +++++++ .../impl/GetClientBookkeepingHandler.java | 46 ++++++++++++++ .../impl/GetClientTestmodeHandler.java | 46 ++++++++++++++ .../impl/GetGameMusicReleaseStateHandler.java | 45 +++++++++++++ .../handler/impl/GetGameSettingHandler.java | 1 + .../impl/GetUserMemoryChapterHandler.java | 51 +++++++++++++++ .../ongeki/model/request/UpsertUserAll.java | 5 ++ .../model/response/GetUserPreviewResp.java | 2 +- .../model/response/data/GameSetting.java | 1 + .../sega/ongeki/model/userdata/UserData.java | 5 ++ .../model/userdata/UserMemoryChapter.java | 63 +++++++++++++++++++ .../ongeki/model/userdata/UserOption.java | 4 +- .../ongeki/model/userdata/UserPlaylog.java | 2 + .../mysql/V79__add_ongeki_memory_table.sql | 29 +++++++++ .../mysql/V80__add_ongeki_memory_chara.sql | 29 +++++++++ .../sqlite/V79__add_ongeki_memory_table.sql | 34 ++++++++++ .../sqlite/V80__add_ongeki_memory_chara.sql | 29 +++++++++ .../dao/userdata/OngekiRepositoryTest.java | 4 +- 19 files changed, 450 insertions(+), 7 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserMemoryChapterRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientBookkeepingHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientTestmodeHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameMusicReleaseStateHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserMemoryChapterHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserMemoryChapter.java create mode 100644 src/main/resources/db/migration/mysql/V79__add_ongeki_memory_table.sql create mode 100644 src/main/resources/db/migration/mysql/V80__add_ongeki_memory_chara.sql create mode 100644 src/main/resources/db/migration/sqlite/V79__add_ongeki_memory_table.sql create mode 100644 src/main/resources/db/migration/sqlite/V80__add_ongeki_memory_chara.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 139a1f87..a027336b 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 @@ -32,6 +32,7 @@ public class OngekiController { private final GetUserBpBaseHandler getUserBpBaseHandler; private final GetUserCardHandler getUserCardHandler; private final GetUserChapterHandler getUserChapterHandler; + private final GetUserMemoryChapterHandler getUserMemoryChapterHandler; private final GetUserCharacterHandler getUserCharacterHandler; private final GetUserDataHandler getUserDataHandler; private final GetUserDeckByKeyHandler getUserDeckByKeyHandler; @@ -59,9 +60,12 @@ public class OngekiController { private final GetUserTrainingRoomByKeyHandler getUserTrainingRoomByKeyHandler; private final GetUserKopHandler getUserKopHandler; private final UpsertUserAllHandler upsertUserAllHandler; + private final GetClientBookkeepingHandler getClientBookkeepingHandler; + private final GetClientTestmodeHandler getClientTestmodeHandler; + private final GetGameMusicReleaseStateHandler getGameMusicReleaseStateHandler; @Autowired - 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, GetUserRivalHandler getUserRivalHandler, GetUserRivalMusicHandler getUserRivalMusicHandler, GetUserScenarioHandler getUserScenarioHandler, GetUserStoryHandler getUserStoryHandler, GetUserTechCountHandler getUserTechCountHandler, GetUserTrainingRoomByKeyHandler getUserTrainingRoomByKeyHandler, UpsertUserAllHandler upsertUserAllHandler, GetGameTechMusicHandler getGameTechMusicHandler, GetUserTechEventHandler getUserTechEventHandler, GetUserTechEventRankingHandler getUserTechEventRankingHandler, GetUserEventMusicHandler getUserEventMusicHandler, GetUserTradeItemHandler getUserTradeItemHandler, GetUserKopHandler getUserKopHandler) { + 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, GetUserRivalHandler getUserRivalHandler, GetUserRivalMusicHandler getUserRivalMusicHandler, GetUserScenarioHandler getUserScenarioHandler, GetUserStoryHandler getUserStoryHandler, GetUserTechCountHandler getUserTechCountHandler, GetUserTrainingRoomByKeyHandler getUserTrainingRoomByKeyHandler, UpsertUserAllHandler upsertUserAllHandler, GetGameTechMusicHandler getGameTechMusicHandler, GetUserTechEventHandler getUserTechEventHandler, GetUserTechEventRankingHandler getUserTechEventRankingHandler, GetUserEventMusicHandler getUserEventMusicHandler, GetUserTradeItemHandler getUserTradeItemHandler, GetUserKopHandler getUserKopHandler, GetClientBookkeepingHandler getClientBookkeepingHandler, GetClientTestmodeHandler getClientTestmodeHandler, GetGameMusicReleaseStateHandler getGameMusicReleaseStateHandler, GetUserMemoryChapterHandler getUserMemoryChapterHandler) { this.getGameEventHandler = getGameEventHandler; this.getGameIdlistHandler = getGameIdlistHandler; this.getGameMessageHandler = getGameMessageHandler; @@ -75,6 +79,7 @@ public class OngekiController { this.getUserBpBaseHandler = getUserBpBaseHandler; this.getUserCardHandler = getUserCardHandler; this.getUserChapterHandler = getUserChapterHandler; + this.getUserMemoryChapterHandler = getUserMemoryChapterHandler; this.getUserCharacterHandler = getUserCharacterHandler; this.getUserDataHandler = getUserDataHandler; this.getUserDeckByKeyHandler = getUserDeckByKeyHandler; @@ -103,6 +108,9 @@ public class OngekiController { this.getUserEventMusicHandler = getUserEventMusicHandler; this.getUserTradeItemHandler = getUserTradeItemHandler; this.getUserKopHandler = getUserKopHandler; + this.getClientBookkeepingHandler = getClientBookkeepingHandler; + this.getClientTestmodeHandler = getClientTestmodeHandler; + this.getGameMusicReleaseStateHandler = getGameMusicReleaseStateHandler; } @PostMapping("ExtendLockTimeApi") @@ -150,6 +158,11 @@ public class OngekiController { return getGameTechMusicHandler.handle(request); } + @PostMapping("GetGameMusicReleaseStateApi") + public String GetGameMusicReleaseState(@ModelAttribute Map request) throws JsonProcessingException { + return getGameMusicReleaseStateHandler.handle(request); + } + @PostMapping("GetUserTechEventApi") public String getUserTechEvent(@ModelAttribute Map request) throws JsonProcessingException { return getUserTechEventHandler.handle(request); @@ -200,6 +213,11 @@ public class OngekiController { return getUserChapterHandler.handle(request); } + @PostMapping("GetUserMemoryChapterApi") + public String getUserMemoryChapter(@ModelAttribute Map request) throws JsonProcessingException { + return getUserMemoryChapterHandler.handle(request); + } + @PostMapping("GetUserCharacterApi") public String getUserCharacter(@ModelAttribute Map request) throws JsonProcessingException { return getUserCharacterHandler.handle(request); @@ -323,10 +341,25 @@ public class OngekiController { } @PostMapping("GetUserKopApi") - public String getUserKopApi(@ModelAttribute Map request) throws JsonProcessingException { + public String getUserKop(@ModelAttribute Map request) throws JsonProcessingException { return getUserKopHandler.handle(request); } + @PostMapping("GetClientBookkeepingApi") + public String getClientBookkeeping(@ModelAttribute Map request) throws JsonProcessingException { + return getClientBookkeepingHandler.handle(request); + } + + @PostMapping("GetClientTestmodeApi") + public String getClientTestmode(@ModelAttribute Map request) throws JsonProcessingException { + return getClientTestmodeHandler.handle(request); + } + + @PostMapping("RegisterPromotionCardApi") + public String registerPromotionCard(@ModelAttribute Map request) { + return "{\"returnCode\":1,\"apiName\":\"registerPromotionCard\"}"; + } + @PostMapping("UpsertClientBookkeepingApi") public String upsertClientBookkeeping(@ModelAttribute Map request) { return "{\"returnCode\":1},\"apiName\":\"upsertClientBookkeeping\""; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserMemoryChapterRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserMemoryChapterRepository.java new file mode 100644 index 00000000..a8624c45 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserMemoryChapterRepository.java @@ -0,0 +1,24 @@ +package icu.samnyan.aqua.sega.ongeki.dao.userdata; + +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserMemoryChapter; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("OngekiUserMemoryChapterRepository") +public interface UserMemoryChapterRepository extends JpaRepository { + + List findByUser_Card_ExtId(long userId); + + Optional findByUserAndChapterId(UserData userData, int chapterId); + + @Transactional + void deleteByUser(UserData user); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientBookkeepingHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientBookkeepingHandler.java new file mode 100644 index 00000000..848f539c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientBookkeepingHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserKopRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +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("OngekiGetClientBookkeepingHandler") +public class GetClientBookkeepingHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetClientBookkeepingHandler.class); + + private final BasicMapper mapper; + + @Autowired + public GetClientBookkeepingHandler(BasicMapper mapper, UserKopRepository userKopRepository) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long placeId = ((Number) request.get("placeId")).longValue(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("placeId", placeId); + resultMap.put("length", 0); + resultMap.put("clientBookkeepingList", List.of()); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientTestmodeHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientTestmodeHandler.java new file mode 100644 index 00000000..6e579a18 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetClientTestmodeHandler.java @@ -0,0 +1,46 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserKopRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +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("OngekiGetClientTestmodeHandler") +public class GetClientTestmodeHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetClientTestmodeHandler.class); + + private final BasicMapper mapper; + + @Autowired + public GetClientTestmodeHandler(BasicMapper mapper, UserKopRepository userKopRepository) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long placeId = ((Number) request.get("placeId")).longValue(); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("placeId", placeId); + resultMap.put("length", 0); + resultMap.put("clientTestmodeList", List.of()); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameMusicReleaseStateHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameMusicReleaseStateHandler.java new file mode 100644 index 00000000..4c10f2be --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameMusicReleaseStateHandler.java @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserKopRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +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.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component("OngekiGetGameMusicReleaseStateHandler") +public class GetGameMusicReleaseStateHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetGameMusicReleaseStateHandler.class); + + private final BasicMapper mapper; + + @Autowired + public GetGameMusicReleaseStateHandler(BasicMapper mapper, UserKopRepository userKopRepository) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + + // TODO: Find out what this does + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("techScore", 0); + resultMap.put("cardNum", 0); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameSettingHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameSettingHandler.java index 2952231d..f2999b57 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameSettingHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameSettingHandler.java @@ -43,6 +43,7 @@ public class GetGameSettingHandler implements BaseHandler { GameSetting gameSetting = new GameSetting( "1.05.00", + "", //TODO dynamic false, 10, start.getPropertyValue(), diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserMemoryChapterHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserMemoryChapterHandler.java new file mode 100644 index 00000000..5fe5ae93 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserMemoryChapterHandler.java @@ -0,0 +1,51 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserMemoryChapterRepository; +import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserMemoryChapter; +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("OngekiGetUserMemoryChapterHandler") +public class GetUserMemoryChapterHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserMemoryChapterHandler.class); + + private final BasicMapper mapper; + + private final UserMemoryChapterRepository userMemoryChapterRepository; + + @Autowired + public GetUserMemoryChapterHandler(BasicMapper mapper, UserMemoryChapterRepository userMemoryChapterRepository) { + this.mapper = mapper; + this.userMemoryChapterRepository = userMemoryChapterRepository; + } + + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + + List MemoryChapterList = userMemoryChapterRepository.findByUser_Card_ExtId(userId); + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + resultMap.put("length", MemoryChapterList.size()); + resultMap.put("userMemoryChapterList", MemoryChapterList); + + String json = mapper.write(resultMap); + + logger.info("Response: " + json); + return 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 a8ffaeb7..89d2173a 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 @@ -61,6 +61,8 @@ public class UpsertUserAll implements Serializable { private List userChapterList; + private List userMemoryChapterList; + private List userItemList; private List userMusicItemList; @@ -110,6 +112,9 @@ public class UpsertUserAll implements Serializable { @JsonProperty("isNewChapterList") private String isNewChapterList; + @JsonProperty("isNewMemoryChapterList") + private String isNewMemoryChapterList; + @JsonProperty("isNewItemList") private String isNewItemList; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/GetUserPreviewResp.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/GetUserPreviewResp.java index 64d2b119..85d56d38 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/GetUserPreviewResp.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/GetUserPreviewResp.java @@ -35,7 +35,7 @@ public class GetUserPreviewResp { private int headphone = 0; private int banStatus = 0; @JsonProperty("isWarningConfirmed") - private boolean isWarningConfirmed = true; + private boolean isWarningConfirmed = false; private int lastEmoneyBrand = 0; private int lastEmoneyCredit = 0; } diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/GameSetting.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/GameSetting.java index bb0f67e8..0c7a5068 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/GameSetting.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/GameSetting.java @@ -14,6 +14,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class GameSetting { private String dataVersion; + private String onlineDataVersion; @JsonProperty("isMaintenance") private boolean isMaintenance; private int requestInterval; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java index 84ad5868..beef75f0 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java @@ -66,6 +66,9 @@ public class UserData implements Serializable { private int overDamageBattlePoint; + @JsonProperty("isDialogWatchedSuggestMemory") + private boolean isDialogWatchedSuggestMemory; + private int nameplateId; private int trophyId; @@ -74,6 +77,8 @@ public class UserData implements Serializable { private int characterId; + private int characterVoiceNo; + private int tabSetting; private int tabSortSetting; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserMemoryChapter.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserMemoryChapter.java new file mode 100644 index 00000000..519194c3 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserMemoryChapter.java @@ -0,0 +1,63 @@ +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 = "OngekiUserMemoryChapter") +@Table(name = "ongeki_user_memory_chapter") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserMemoryChapter 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 chapterId; + + private int jewelCount; + + private int lastPlayMusicCategory; + + private int lastPlayMusicId; + + private int lastPlayMusicLevel; + + @JsonProperty("isDialogWatched") + private boolean isDialogWatched; + + @JsonProperty("isStoryWatched") + private boolean isStoryWatched; + + @JsonProperty("isBossWatched") + private boolean isBossWatched; + + @JsonProperty("isClear") + private boolean isClear; + + private int gaugeId; + + private int gauseNum; + + public UserMemoryChapter(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserOption.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserOption.java index 521998f1..a9868999 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserOption.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserOption.java @@ -42,7 +42,7 @@ public class UserOption implements Serializable { private int abort; - public int stealthField; + private int stealthField; private int tapSound; @@ -72,7 +72,7 @@ public class UserOption implements Serializable { private int colorLaneBright; - public int colorWallBright; + private int colorWallBright; private int colorLane; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java index 4aad4233..b0ad0ad5 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java @@ -105,6 +105,8 @@ public class UserPlaylog implements Serializable { private int battleScoreRank; + private int platinumScore; + private int maxCombo; private int judgeMiss; diff --git a/src/main/resources/db/migration/mysql/V79__add_ongeki_memory_table.sql b/src/main/resources/db/migration/mysql/V79__add_ongeki_memory_table.sql new file mode 100644 index 00000000..3529cbcf --- /dev/null +++ b/src/main/resources/db/migration/mysql/V79__add_ongeki_memory_table.sql @@ -0,0 +1,29 @@ +-- ongeki_user_data +ALTER TABLE ongeki_user_data ADD COLUMN is_dialog_watched_suggest_memory BOOLEAN; +ALTER TABLE ongeki_user_data ADD COLUMN character_voice_no INTEGER; +UPDATE ongeki_user_data SET is_dialog_watched_suggest_memory=false; +UPDATE ongeki_user_data SET character_voice_no=0; + +-- ongeki_user_playlog +ALTER TABLE ongeki_user_playlog ADD COLUMN platinum_score INTEGER; +UPDATE ongeki_user_playlog SET platinum_score=0; + +-- ongeki_user_memory_chapter +CREATE TABLE ongeki_user_memory_chapter +( + id BIGINT auto_increment PRIMARY KEY, + chapter_id INTEGER NOT NULL, + is_clear BOOLEAN NOT NULL, + is_story_watched BOOLEAN NOT NULL, + is_dialog_watched BOOLEAN NOT NULL, + is_boss_watched BOOLEAN NOT NULL, + jewel_count INTEGER NOT NULL, + last_play_music_category INTEGER NOT NULL, + last_play_music_id INTEGER NOT NULL, + last_play_music_level INTEGER NOT NULL, + gauge_id INTEGER NOT NULL, + gauge_num INTEGER NOT NULL, + user_id BIGINT, + constraint FKkbNRqobZgn7cDysE + foreign key (user_id) references ongeki_user_data (id) +); diff --git a/src/main/resources/db/migration/mysql/V80__add_ongeki_memory_chara.sql b/src/main/resources/db/migration/mysql/V80__add_ongeki_memory_chara.sql new file mode 100644 index 00000000..f53d4360 --- /dev/null +++ b/src/main/resources/db/migration/mysql/V80__add_ongeki_memory_chara.sql @@ -0,0 +1,29 @@ +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (1, 'あかニャン', '',1); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (6, 'こんじきニャン', '',6); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (2024, '風見 幽香', '',2024); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46020, '山手響子', '',46020); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46021, '犬寄しのぶ', '',46021); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46022, '笹子・ジェニファー・由香', '',46022); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46023, '清水絵空', '',46023); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46024, '青柳 椿', '',46024); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46025, '月見山 渚', '',46025); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46026, '矢野緋彩', '',46026); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46027, '三宅葵依', '',46027); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46069, 'イレイナ', '',46069); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46070, 'フラン', '',46070); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46071, 'サヤ', '',46071); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46072, 'シーラ', '',46072); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46073, 'ジャンヌ・ダルク', '',46073); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46074, '鷹取 舞花', '',46074); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46075, '鹿野 志穂', '',46075); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46076, '月居 ほのか', '',46076); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46077, '赤川 千紗', '',46077); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46078, '恵庭 あいり', '',46078); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46079, '九条 柚葉', '',46079); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46080, '神室 絢', '',46080); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46081, '宮路 まほろ', '',46081); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46082, '日名倉 莉子', '',46082); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46083, '宇津木 聡里', '',46083); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46084, '明神 凛音', '',46084); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46085, '遠見 鳴', '',46085); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46086, 'ノエル・ザ・ネクストシーズン', '',46086); diff --git a/src/main/resources/db/migration/sqlite/V79__add_ongeki_memory_table.sql b/src/main/resources/db/migration/sqlite/V79__add_ongeki_memory_table.sql new file mode 100644 index 00000000..19007217 --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V79__add_ongeki_memory_table.sql @@ -0,0 +1,34 @@ +-- ongeki_user_data +ALTER TABLE ongeki_user_data ADD COLUMN is_dialog_watched_suggest_memory BOOLEAN; +ALTER TABLE ongeki_user_data ADD COLUMN character_voice_no INTEGER; +UPDATE ongeki_user_data SET is_dialog_watched_suggest_memory=false; +UPDATE ongeki_user_data SET character_voice_no=0; + +-- ongeki_user_playlog +ALTER TABLE ongeki_user_playlog ADD COLUMN platinum_score INTEGER; +UPDATE ongeki_user_playlog SET platinum_score=0; + +-- ongeki_user_memory_chapter +CREATE TABLE ongeki_user_memory_chapter +( + id INTEGER, + chapter_id INTEGER NOT NULL, + is_clear BOOLEAN NOT NULL, + is_story_watched BOOLEAN NOT NULL, + is_dialog_watched BOOLEAN NOT NULL, + is_boss_watched BOOLEAN NOT NULL, + jewel_count INTEGER NOT NULL, + last_play_music_category INTEGER NOT NULL, + last_play_music_id INTEGER NOT NULL, + last_play_music_level INTEGER NOT NULL, + gauge_id INTEGER NOT NULL, + gauge_num INTEGER NOT NULL, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_memory_chapter_uq UNIQUE ( + chapter_id, + user_id + ) ON CONFLICT REPLACE +); diff --git a/src/main/resources/db/migration/sqlite/V80__add_ongeki_memory_chara.sql b/src/main/resources/db/migration/sqlite/V80__add_ongeki_memory_chara.sql new file mode 100644 index 00000000..f53d4360 --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V80__add_ongeki_memory_chara.sql @@ -0,0 +1,29 @@ +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (1, 'あかニャン', '',1); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (6, 'こんじきニャン', '',6); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (2024, '風見 幽香', '',2024); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46020, '山手響子', '',46020); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46021, '犬寄しのぶ', '',46021); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46022, '笹子・ジェニファー・由香', '',46022); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46023, '清水絵空', '',46023); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46024, '青柳 椿', '',46024); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46025, '月見山 渚', '',46025); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46026, '矢野緋彩', '',46026); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46027, '三宅葵依', '',46027); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46069, 'イレイナ', '',46069); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46070, 'フラン', '',46070); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46071, 'サヤ', '',46071); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46072, 'シーラ', '',46072); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46073, 'ジャンヌ・ダルク', '',46073); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46074, '鷹取 舞花', '',46074); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46075, '鹿野 志穂', '',46075); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46076, '月居 ほのか', '',46076); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46077, '赤川 千紗', '',46077); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46078, '恵庭 あいり', '',46078); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46079, '九条 柚葉', '',46079); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46080, '神室 絢', '',46080); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46081, '宮路 まほろ', '',46081); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46082, '日名倉 莉子', '',46082); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46083, '宇津木 聡里', '',46083); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46084, '明神 凛音', '',46084); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46085, '遠見 鳴', '',46085); +INSERT INTO ongeki_game_chara (id, name, cv, model_id) VALUES (46086, 'ノエル・ザ・ネクストシーズン', '',46086); diff --git a/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java b/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java index 916f3861..463b3d1a 100644 --- a/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java +++ b/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java @@ -338,7 +338,7 @@ class OngekiRepositoryTest { } private UserData getUser(Card c) { - return new UserData(-1, c, "Hello", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "2020", "2020", "SDDT", "1.00.00", "1.00.00", "2020", "SDDT", "1.00.00", "1.00.00", "", "2020", 0, "0", 0, "123", 0, "A000000", 0, 0, 0); + return new UserData(-1, c, "Hello", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "2020", "2020", "SDDT", "1.00.00", "1.00.00", "2020", "SDDT", "1.00.00", "1.00.00", "", "2020", 0, "0", 0, "123", 0, "A000000", 0, 0, 0); } private UserActivity getActivity(UserData u, Integer activityId) { @@ -398,7 +398,7 @@ class OngekiRepositoryTest { } private UserPlaylog getPlaylog(UserData u, Integer musicId) { - return new UserPlaylog(-1, u, 0, 0, "", "", "", musicId, 1, 1, 1, "", 1, 1, 1, 1, "", "", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, 0, 0); + return new UserPlaylog(-1, u, 0, 0, "", "", "", musicId, 1, 1, 1, "", 1, 1, 1, 1, "", "", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, 0, 0); } private UserScenario getScenario(UserData u, Integer scenarioId) {