From a978f0ee0c58a8f5ff08170939f064f858ecdd5e Mon Sep 17 00:00:00 2001 From: PenguinCaptain Date: Thu, 27 Mar 2025 07:31:36 +0800 Subject: [PATCH] [+] Re:Fresh: Add user event map and missing fields --- .../ongeki/controller/OngekiController.java | 8 ++- .../dao/userdata/UserEventMapRepository.java | 23 +++++++++ .../handler/impl/GetUserEventMapHandler.java | 51 +++++++++++++++++++ .../handler/impl/UpsertUserAllHandler.java | 15 +++++- .../ongeki/model/request/UpsertUserAll.java | 2 + .../ongeki/model/userdata/UserEventMap.java | 47 +++++++++++++++++ .../model/userdata/UserMemoryChapter.java | 3 ++ .../db/40/V1000_42__ongeki_refresh.sql | 18 +++++++ 8 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMapRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMapHandler.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMap.java 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 9d07317e..2cc79878 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 @@ -37,6 +37,7 @@ public class OngekiController { private final GetUserCharacterHandler getUserCharacterHandler; private final GetUserDataHandler getUserDataHandler; private final GetUserDeckByKeyHandler getUserDeckByKeyHandler; + private final GetUserEventMapHandler getUserEventMapHandler; private final GetUserEventPointHandler getUserEventPointHandler; private final GetUserEventRankingHandler getUserEventRankingHandler; private final GetUserEventMusicHandler getUserEventMusicHandler; @@ -54,6 +55,7 @@ public class OngekiController { private final GetUserRivalMusicHandler getUserRivalMusicHandler; private final GetUserRivalDataHandler getUserRivalDataHandler; private final GetUserScenarioHandler getUserScenarioHandler; + private final GetUserSkinHandler getUserSkinHandler; private final GetUserStoryHandler getUserStoryHandler; private final GetUserTechCountHandler getUserTechCountHandler; private final GetUserTechEventHandler getUserTechEventHandler; @@ -65,7 +67,6 @@ public class OngekiController { private final GetClientBookkeepingHandler getClientBookkeepingHandler; private final GetClientTestmodeHandler getClientTestmodeHandler; private final GetGameMusicReleaseStateHandler getGameMusicReleaseStateHandler; - private final GetUserSkinHandler getUserSkinHandler; @PostMapping("ExtendLockTimeApi") public String extendLockTime(@ModelAttribute Map request) { @@ -187,6 +188,11 @@ public class OngekiController { return getUserDeckByKeyHandler.handle(request); } + @PostMapping("GetUserEventMapApi") + public String getUserEventMap(@ModelAttribute Map request) throws JsonProcessingException { + return getUserEventMapHandler.handle(request); + } + @PostMapping("GetUserEventPointApi") public String getUserEventPoint(@ModelAttribute Map request) throws JsonProcessingException { return getUserEventPointHandler.handle(request); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMapRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMapRepository.java new file mode 100644 index 00000000..e3a1e979 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMapRepository.java @@ -0,0 +1,23 @@ +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.UserEventMap; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("OngekiUserEventMapRepository") +public interface UserEventMapRepository extends JpaRepository { + + Optional findByUser(UserData userData); + + Optional findByUser_Card_ExtId(long userId); + + @Transactional + void deleteByUser(UserData user); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMapHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMapHandler.java new file mode 100644 index 00000000..a447ecd8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMapHandler.java @@ -0,0 +1,51 @@ +package icu.samnyan.aqua.sega.ongeki.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.general.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserEventMapRepository; +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("OngekiGetUserEventMapHandler") +public class GetUserEventMapHandler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(GetUserEventMapHandler.class); + + private final BasicMapper mapper; + + private final UserEventMapRepository userEventMapRepository; + + @Autowired + public GetUserEventMapHandler(BasicMapper mapper, UserEventMapRepository userEventMapRepository) { + this.mapper = mapper; + this.userEventMapRepository = userEventMapRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = ((Number) request.get("userId")).longValue(); + var eventMapOptional = userEventMapRepository.findByUser_Card_ExtId(userId); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", userId); + if(eventMapOptional.isPresent()) { + resultMap.put("userEventMap", eventMapOptional.get()); + } else { + resultMap.put("userEventMap", null); + } + + 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 3a78e4df..513427d9 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 @@ -60,10 +60,11 @@ public class UpsertUserAllHandler implements BaseHandler { private final UserEventMusicRepository userEventMusicRepository; private final UserTechEventRepository userTechEventRepository; private final UserKopRepository userKopRepository; + private final UserEventMapRepository userEventMapRepository; @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, UserBossRepository userBossRepository, UserScenarioRepository userScenarioRepository, UserTechCountRepository userTechCountRepository, UserTradeItemRepository userTradeItemRepository, UserEventMusicRepository userEventMusicRepository, UserTechEventRepository userTechEventRepository, UserKopRepository userKopRepository, UserMemoryChapterRepository userMemoryChapterRepository) { + 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, UserTradeItemRepository userTradeItemRepository, UserEventMusicRepository userEventMusicRepository, UserTechEventRepository userTechEventRepository, UserKopRepository userKopRepository, UserMemoryChapterRepository userMemoryChapterRepository, UserEventMapRepository userEventMapRepository) { this.mapper = mapper; this.cardService = cardService; this.userDataRepository = userDataRepository; @@ -91,6 +92,7 @@ public class UpsertUserAllHandler implements BaseHandler { this.userEventMusicRepository = userEventMusicRepository; this.userTechEventRepository = userTechEventRepository; this.userKopRepository = userKopRepository; + this.userEventMapRepository = userEventMapRepository; } @Override @@ -574,6 +576,17 @@ public class UpsertUserAllHandler implements BaseHandler { } userKopRepository.saveAll(newUserKopList); + // UserEventMap + UserEventMap newUserEventMap = upsertUserAll.getUserEventMap(); + if (newUserEventMap != null) { + Optional userEventOptional = userEventMapRepository.findByUser(newUserData); + UserEventMap userEventMap = userEventOptional.orElseGet(() -> new UserEventMap(newUserData)); + + newUserEventMap.setId(userEventMap.getId()); + newUserEventMap.setUser(newUserData); + userEventMapRepository.save(newUserEventMap); + } + String json = mapper.write(new CodeResp(1, "upsertUserAll")); 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 68ff4ebc..e24b437e 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 @@ -102,6 +102,8 @@ public class UpsertUserAll implements Serializable { private List userKopList; + public UserEventMap userEventMap; + private Map clientSystemInfo; @JsonProperty("isNewMusicDetailList") diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMap.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMap.java new file mode 100644 index 00000000..0a841a9d --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMap.java @@ -0,0 +1,47 @@ +package icu.samnyan.aqua.sega.ongeki.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.persistence.*; +import java.io.Serializable; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Entity(name = "OngekiUserEventMap") +@Table(name = "ongeki_user_event_map") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserEventMap 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 eventId; + + private int mapId; + + private String mapData; + + private int totalPoint; + + private int totalUsePoint; + + public UserEventMap(UserData userData) { + this.user = userData; + } +} 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 index ba4a11b8..2ed5a1d2 100644 --- 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 @@ -50,6 +50,9 @@ public class UserMemoryChapter implements Serializable { @JsonProperty("isBossWatched") private boolean isBossWatched; + @JsonProperty("isEndingWatched") + private boolean isEndingWatched; + @JsonProperty("isClear") private boolean isClear; diff --git a/src/main/resources/db/40/V1000_42__ongeki_refresh.sql b/src/main/resources/db/40/V1000_42__ongeki_refresh.sql index 3d02d9e8..fdeeab29 100644 --- a/src/main/resources/db/40/V1000_42__ongeki_refresh.sql +++ b/src/main/resources/db/40/V1000_42__ongeki_refresh.sql @@ -14,3 +14,21 @@ ALTER TABLE ongeki_user_data ADD COLUMN sum_platinum_score_star INT NOT NULL DEF -- ongeki_user_music_detail ALTER TABLE ongeki_user_music_detail ADD COLUMN platinum_score_star INT NOT NULL DEFAULT 0; + +-- ongeki_user_memory_chapter +ALTER TABLE ongeki_user_memory_chapter ADD COLUMN is_ending_watched BIT NOT NULL; + +-- ongeki_user_event_map +CREATE TABLE ongeki_user_event_map +( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + user_id BIGINT NULL, + event_id INT NOT NULL, + map_id INT NOT NULL, + map_data VARCHAR(255) NULL, + total_point INT NOT NULL, + total_use_point INT NOT NULL +); + +ALTER TABLE ongeki_user_event_map + ADD CONSTRAINT FKU_ONGEKI_USER_EVENT_MAP FOREIGN KEY (user_id) REFERENCES ongeki_user_data (id); \ No newline at end of file