diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMusicRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMusicRepository.java new file mode 100644 index 00000000..7d2a8f14 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventMusicRepository.java @@ -0,0 +1,24 @@ +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.UserEventMusic; +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("OngekiUserEventMusicRepository") +public interface UserEventMusicRepository extends JpaRepository { + + List findByUser_Card_ExtId(long userId); + + Optional findByUserAndEventIdAndTypeAndMusicId(UserData userData, int eventId, int type, int musicId); + + @Transactional + void deleteByUser(UserData user); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserKopRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserKopRepository.java new file mode 100644 index 00000000..812b1e22 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserKopRepository.java @@ -0,0 +1,24 @@ +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.UserKop; +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("OngekiUserKopRepository") +public interface UserKopRepository extends JpaRepository { + + List findByUser_Card_ExtId(long userId); + + Optional findByUserAndKopIdAndAreaId(UserData userData, int kopId, int areaId); + + @Transactional + void deleteByUser(UserData user); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechEventRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechEventRepository.java new file mode 100644 index 00000000..e23bf221 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTechEventRepository.java @@ -0,0 +1,24 @@ +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.UserTechEvent; +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("OngekiUserTechEventRepository") +public interface UserTechEventRepository extends JpaRepository { + + List findByUser_Card_ExtId(long userId); + + Optional findByUserAndEventId(UserData userData, int eventId); + + @Transactional + void deleteByUser(UserData user); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTradeItemRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTradeItemRepository.java new file mode 100644 index 00000000..9d0c28e8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserTradeItemRepository.java @@ -0,0 +1,26 @@ +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.UserTradeItem; +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("OngekiUserTradeItemRepository") +public interface UserTradeItemRepository extends JpaRepository { + + List findByUser_Card_ExtId(long userId); + + List findByUser_Card_ExtIdAndChapterIdGreaterThanEqualAndChapterIdLessThanEqual(long userId, int startChapterId, int endChapterId); + + Optional findByUserAndChapterIdAndTradeItemId(UserData userData, int chapterId, int tradeItemId); + + @Transactional + void deleteByUser(UserData user); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameTechMusicHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameTechMusicHandler.java index ff0abeec..da215eca 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameTechMusicHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetGameTechMusicHandler.java @@ -32,6 +32,8 @@ public class GetGameTechMusicHandler implements BaseHandler { public String handle(Map request) throws JsonProcessingException { List techMusicList = new ArrayList<>(); + // This endpoint seems related to "techchallengeevent" in game data, TBD + Map resultMap = new LinkedHashMap<>(); resultMap.put("length", 0); resultMap.put("gameTechMusicList", techMusicList); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMusicHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMusicHandler.java index 27778a08..44dbbef4 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMusicHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserEventMusicHandler.java @@ -1,14 +1,16 @@ package icu.samnyan.aqua.sega.ongeki.handler.impl; import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserEventMusicRepository; import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserEventMusic; 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.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -23,19 +25,22 @@ public class GetUserEventMusicHandler implements BaseHandler { private final BasicMapper mapper; + private final UserEventMusicRepository userEventMusicRepository; + @Autowired - public GetUserEventMusicHandler(BasicMapper mapper) { + public GetUserEventMusicHandler(BasicMapper mapper, UserEventMusicRepository userEventMusicRepository) { this.mapper = mapper; + this.userEventMusicRepository = userEventMusicRepository; } @Override public String handle(Map request) throws JsonProcessingException { long userId = ((Number) request.get("userId")).longValue(); - List eventMusicList = new ArrayList<>(); + List eventMusicList = userEventMusicRepository.findByUser_Card_ExtId(userId); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); - resultMap.put("length", 0); + resultMap.put("length", eventMusicList.size()); resultMap.put("userEventMusicList", eventMusicList); String json = mapper.write(resultMap); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserKopHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserKopHandler.java index b170cfb4..1d564859 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserKopHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserKopHandler.java @@ -1,14 +1,16 @@ 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.ongeki.model.userdata.UserKop; 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.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -23,19 +25,22 @@ public class GetUserKopHandler implements BaseHandler { private final BasicMapper mapper; + private final UserKopRepository userKopRepository; + @Autowired - public GetUserKopHandler(BasicMapper mapper) { + public GetUserKopHandler(BasicMapper mapper, UserKopRepository userKopRepository) { this.mapper = mapper; + this.userKopRepository = userKopRepository; } @Override public String handle(Map request) throws JsonProcessingException { long userId = ((Number) request.get("userId")).longValue(); - List kopList = new ArrayList<>(); + List kopList = userKopRepository.findByUser_Card_ExtId(userId); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); - resultMap.put("length", 0); + resultMap.put("length", kopList.size()); resultMap.put("userKopList", kopList); String json = mapper.write(resultMap); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventHandler.java index fb2eab36..1df7fc51 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventHandler.java @@ -1,14 +1,16 @@ package icu.samnyan.aqua.sega.ongeki.handler.impl; import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserTechEventRepository; import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserTechEvent; 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.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -23,19 +25,22 @@ public class GetUserTechEventHandler implements BaseHandler { private final BasicMapper mapper; + private final UserTechEventRepository userTechEventRepository; + @Autowired - public GetUserTechEventHandler(BasicMapper mapper) { + public GetUserTechEventHandler(BasicMapper mapper, UserTechEventRepository userTechEventRepository) { this.mapper = mapper; + this.userTechEventRepository = userTechEventRepository; } @Override public String handle(Map request) throws JsonProcessingException { long userId = ((Number) request.get("userId")).longValue(); - List techEventList = new ArrayList<>(); + List techEventList = userTechEventRepository.findByUser_Card_ExtId(userId); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); - resultMap.put("length", 0); + resultMap.put("length", techEventList.size()); resultMap.put("userTechEventList", techEventList); String json = mapper.write(resultMap); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventRankingHandler.java index 4f65aa41..fc048b64 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventRankingHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTechEventRankingHandler.java @@ -1,13 +1,19 @@ package icu.samnyan.aqua.sega.ongeki.handler.impl; import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserTechEventRepository; import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.response.data.UserTechEventRankingItem; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserTechEvent; 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.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -23,19 +29,33 @@ public class GetUserTechEventRankingHandler implements BaseHandler { private final BasicMapper mapper; + private final UserTechEventRepository userTechEventRepository; + @Autowired - public GetUserTechEventRankingHandler(BasicMapper mapper) { + public GetUserTechEventRankingHandler(BasicMapper mapper, UserTechEventRepository userTechEventRepository) { this.mapper = mapper; + this.userTechEventRepository = userTechEventRepository; } @Override public String handle(Map request) throws JsonProcessingException { long userId = ((Number) request.get("userId")).longValue(); - List techEventRankingList = new ArrayList<>(); + + String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0")); + + List techEventList = userTechEventRepository.findByUser_Card_ExtId(userId); + List techEventRankingList = new ArrayList<>(); + techEventList.forEach(x -> techEventRankingList.add(new UserTechEventRankingItem( + x.getEventId(), + time, + 1, + x.getTotalTechScore(), + x.getTotalPlatinumScore() + ))); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); - resultMap.put("length", 0); + resultMap.put("length", techEventRankingList.size()); resultMap.put("userTechEventRankingList", techEventRankingList); String json = mapper.write(resultMap); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTradeItemHandler.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTradeItemHandler.java index ab479210..25280901 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTradeItemHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/handler/impl/GetUserTradeItemHandler.java @@ -1,14 +1,16 @@ package icu.samnyan.aqua.sega.ongeki.handler.impl; import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserTradeItemRepository; import icu.samnyan.aqua.sega.ongeki.handler.BaseHandler; +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserTradeItem; 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.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -23,19 +25,25 @@ public class GetUserTradeItemHandler implements BaseHandler { private final BasicMapper mapper; + private final UserTradeItemRepository userTradeItemRepository; + @Autowired - public GetUserTradeItemHandler(BasicMapper mapper) { + public GetUserTradeItemHandler(BasicMapper mapper, UserTradeItemRepository userTradeItemRepository) { this.mapper = mapper; + this.userTradeItemRepository = userTradeItemRepository; } @Override public String handle(Map request) throws JsonProcessingException { long userId = ((Number) request.get("userId")).longValue(); - List tradeItemList = new ArrayList<>(); + int startChapterId = ((Number) request.get("startChapterId")).intValue(); + int endChapterId = ((Number) request.get("endChapterId")).intValue(); + + List tradeItemList = userTradeItemRepository.findByUser_Card_ExtIdAndChapterIdGreaterThanEqualAndChapterIdLessThanEqual(userId, startChapterId, endChapterId); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); - resultMap.put("length", 0); + resultMap.put("length", tradeItemList.size()); resultMap.put("userTradeItemList", tradeItemList); String json = mapper.write(resultMap); 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 2f6bf702..78f4aa81 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 @@ -53,10 +53,14 @@ public class UpsertUserAllHandler implements BaseHandler { private final UserBossRepository userBossRepository; private final UserScenarioRepository userScenarioRepository; private final UserTechCountRepository userTechCountRepository; + private final UserTradeItemRepository userTradeItemRepository; + private final UserEventMusicRepository userEventMusicRepository; + private final UserTechEventRepository userTechEventRepository; + private final UserKopRepository userKopRepository; @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) { + 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) { this.mapper = mapper; this.cardService = cardService; this.userDataRepository = userDataRepository; @@ -79,6 +83,10 @@ public class UpsertUserAllHandler implements BaseHandler { this.userBossRepository = userBossRepository; this.userScenarioRepository = userScenarioRepository; this.userTechCountRepository = userTechCountRepository; + this.userTradeItemRepository = userTradeItemRepository; + this.userEventMusicRepository = userEventMusicRepository; + this.userTechEventRepository = userTechEventRepository; + this.userKopRepository = userKopRepository; } @Override @@ -131,7 +139,7 @@ public class UpsertUserAllHandler implements BaseHandler { userPlaylogRepository.saveAll(newUserPlaylogList); - // UserSessionlogList doesn't need to save for a private server + // UserSessionlogList, UserJewelboostlogLost doesn't need to save for a private server // UserActivityList @@ -450,6 +458,73 @@ public class UpsertUserAllHandler implements BaseHandler { userScenarioRepository.saveAll(newUserScenarioList); } + // UserTradeItemList + List userTradeItemList = upsertUserAll.getUserTradeItemList(); + List newUserTradeItemList = new ArrayList<>(); + + for (UserTradeItem newUserTradeItem : userTradeItemList) { + int chapterId = newUserTradeItem.getChapterId(); + int tradeItemId = newUserTradeItem.getTradeItemId(); + + Optional tradeItemOptional = userTradeItemRepository.findByUserAndChapterIdAndTradeItemId(newUserData, chapterId, tradeItemId); + UserTradeItem userTradeItem = tradeItemOptional.orElseGet(() -> new UserTradeItem(newUserData)); + + newUserTradeItem.setId(userTradeItem.getId()); + newUserTradeItem.setUser(newUserData); + newUserTradeItemList.add(newUserTradeItem); + } + userTradeItemRepository.saveAll(newUserTradeItemList); + + // UserEventMusicList + List userEventMusicList = upsertUserAll.getUserEventMusicList(); + List newUserEventMusicList = new ArrayList<>(); + + for (UserEventMusic newUserEventMusic : userEventMusicList) { + int eventId = newUserEventMusic.getEventId(); + int type = newUserEventMusic.getType(); + int musicId = newUserEventMusic.getMusicId(); + + Optional eventMusicOptional = userEventMusicRepository.findByUserAndEventIdAndTypeAndMusicId(newUserData, eventId, type, musicId); + UserEventMusic userEventMusic = eventMusicOptional.orElseGet(() -> new UserEventMusic(newUserData)); + + newUserEventMusic.setId(userEventMusic.getId()); + newUserEventMusic.setUser(newUserData); + newUserEventMusicList.add(newUserEventMusic); + } + userEventMusicRepository.saveAll(newUserEventMusicList); + + // UserTechEventList + List userTechEventList = upsertUserAll.getUserTechEventList(); + List newUserTechEventList = new ArrayList<>(); + + for (UserTechEvent newUserTechEvent : userTechEventList) { + int eventId = newUserTechEvent.getEventId(); + + Optional techEventOptional = userTechEventRepository.findByUserAndEventId(newUserData, eventId); + UserTechEvent userTechEvent = techEventOptional.orElseGet(() -> new UserTechEvent(newUserData)); + + newUserTechEvent.setId(userTechEvent.getId()); + newUserTechEvent.setUser(newUserData); + newUserTechEventList.add(newUserTechEvent); + } + userTechEventRepository.saveAll(newUserTechEventList); + + // UserKopList + List userKopList = upsertUserAll.getUserKopList(); + List newUserKopList = new ArrayList<>(); + + for (UserKop newUserKop : userKopList) { + int kopId = newUserKop.getKopId(); + int areaId = newUserKop.getAreaId(); + + Optional kopOptional = userKopRepository.findByUserAndKopIdAndAreaId(newUserData, kopId, areaId); + UserKop userKop = kopOptional.orElseGet(() -> new UserKop(newUserData)); + + newUserKop.setId(userKop.getId()); + newUserKop.setUser(newUserData); + newUserKopList.add(newUserKop); + } + userKopRepository.saveAll(newUserKopList); 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 9dafe58f..a8ffaeb7 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 @@ -79,13 +79,13 @@ public class UpsertUserAll implements Serializable { private List userScenarioList; - private List> userTradeItemList; + private List userTradeItemList; - private List> userEventMusicList; + private List userEventMusicList; - private List> userTechEventList; + private List userTechEventList; - private List> userKopList; + private List userKopList; private Map clientSystemInfo; diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/UserTechEventRankingItem.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/UserTechEventRankingItem.java new file mode 100644 index 00000000..f56539ed --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/response/data/UserTechEventRankingItem.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.ongeki.model.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserTechEventRankingItem { + private int eventId; + private String date; + private int rank; + private int totalTechScore; + private int totalPlatinumScore; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMusic.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMusic.java new file mode 100644 index 00000000..d54fe35c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserEventMusic.java @@ -0,0 +1,55 @@ +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 = "OngekiUserEventMusic") +@Table(name = "ongeki_user_event_music") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserEventMusic 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 type; + + private int musicId; + + private int level; + + private int techScoreMax; + + private int platinumScoreMax; + + public String techRecordDate; + + @JsonProperty("isTechNewRecord") + public boolean isTechNewRecord; + + public UserEventMusic(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserKop.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserKop.java new file mode 100644 index 00000000..e134042e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserKop.java @@ -0,0 +1,53 @@ +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 = "OngekiUserKop") +@Table(name = "ongeki_user_kop") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserKop 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 String authKey; + + private int kopId; + + private int areaId; + + private int totalTechScore; + + private int totalPlatinumScore; + + private String techRecordDate; + + @JsonProperty("isTotalTechNewRecord") + private boolean isTotalTechNewRecord; + + public UserKop(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechEvent.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechEvent.java new file mode 100644 index 00000000..539eee30 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTechEvent.java @@ -0,0 +1,52 @@ +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 = "OngekiUserTechEvent") +@Table(name = "ongeki_user_tech_event") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserTechEvent 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 totalTechScore; + + private int totalPlatinumScore; + + private String techRecordDate; + + @JsonProperty("isRankingRewarded") + private boolean isRankingRewarded; + + @JsonProperty("isTotalTechNewRecord") + private boolean isTotalTechNewRecord; + + public UserTechEvent(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTradeItem.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTradeItem.java new file mode 100644 index 00000000..076e98a6 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserTradeItem.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 = "OngekiUserTradeItem") +@Table(name = "ongeki_user_trade_item") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserTradeItem 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 tradeItemId; + + private int tradeCount; + + public UserTradeItem(UserData userData) { + this.user = userData; + } +} diff --git a/src/main/resources/db/migration/mysql/V36__add_ongeki_redplus_table.sql b/src/main/resources/db/migration/mysql/V36__add_ongeki_redplus_table.sql new file mode 100644 index 00000000..0d12b870 --- /dev/null +++ b/src/main/resources/db/migration/mysql/V36__add_ongeki_redplus_table.sql @@ -0,0 +1,55 @@ +CREATE TABLE ongeki_user_trade_item ( + id BIGINT auto_increment PRIMARY KEY, + chapter_id INT, + trade_item_id INT, + trade_count INT, + user_id BIGINT, + CONSTRAINT UKUApE4XTzAn4TknhsyHbMoxk2vxr + UNIQUE (chapter_id, trade_item_id, user_id), + constraint FKjK4YZyUoHo397H35roV4y5xCGPL + foreign key (user_id) references ongeki_user_data (id) ); + +CREATE TABLE ongeki_user_tech_event ( + id BIGINT auto_increment PRIMARY KEY, + event_id INT, + total_tech_score INT, + total_platinum_score INT, + tech_record_date VARCHAR (255), + is_ranking_rewarded BIT, + is_total_tech_new_record BIT, + user_id BIGINT, + CONSTRAINT UKMy7BYF82aAqh7gcbULDtNZQ3L9u + UNIQUE (event_id, user_id), + constraint FKeA3LffHizJP95rE8WLL4ANZZLfM + foreign key (user_id) references ongeki_user_data (id) ); + +CREATE TABLE ongeki_user_kop ( + id BIGINT auto_increment PRIMARY KEY, + auth_key VARCHAR (255), + kop_id INT, + area_id INT, + total_tech_score INT, + total_platinum_score INT, + tech_record_date VARCHAR (255), + is_total_tech_new_record BIT, + user_id BIGINT, + CONSTRAINT UKhB9obeVojvBcG7iShsgrEb29W9R + UNIQUE (kop_id, area_id, user_id), + constraint FKNeHq3QCaKu7ipBCDEtZQ3QFgvBv + foreign key (user_id) references ongeki_user_data (id) ); + +CREATE TABLE ongeki_user_event_music ( + id BIGINT auto_increment PRIMARY KEY, + event_id INT, + type INT, + music_id INT, + level INT, + tech_score_max INT, + platinum_score_max INT, + tech_record_date VARCHAR (255), + is_tech_new_record BIT, + user_id BIGINT, + CONSTRAINT UKo5PU3BgZeTKB8SNykq9U7xjfshp + UNIQUE (event_id, type, music_id, user_id), + constraint FKYyerzsu49pHUHJNvN67w4SGQbB2 + foreign key (user_id) references ongeki_user_data (id) ); \ No newline at end of file diff --git a/src/main/resources/db/migration/sqlite/V36__add_ongeki_redplus_table.sql b/src/main/resources/db/migration/sqlite/V36__add_ongeki_redplus_table.sql new file mode 100644 index 00000000..372edbf2 --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V36__add_ongeki_redplus_table.sql @@ -0,0 +1,79 @@ +CREATE TABLE ongeki_user_trade_item ( + id INTEGER, + chapter_id INTEGER, + trade_item_id INTEGER, + trade_count INTEGER, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_trade_item_uq UNIQUE ( + chapter_id, + trade_item_id, + user_id + ) + ON CONFLICT REPLACE +); + +CREATE TABLE ongeki_user_tech_event ( + id INTEGER, + event_id INTEGER, + total_tech_score INTEGER, + total_platinum_score INTEGER, + tech_record_date VARCHAR (255), + is_ranking_rewarded BOOLEAN, + is_total_tech_new_record BOOLEAN, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_tech_event_uq UNIQUE ( + event_id, + user_id + ) + ON CONFLICT REPLACE +); + +CREATE TABLE ongeki_user_kop ( + id INTEGER, + auth_key VARCHAR (255), + kop_id INTEGER, + area_id INTEGER, + total_tech_score INTEGER, + total_platinum_score INTEGER, + tech_record_date VARCHAR (255), + is_total_tech_new_record BOOLEAN, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_kop_uq UNIQUE ( + kop_id, + area_id, + user_id + ) + ON CONFLICT REPLACE +); + +CREATE TABLE ongeki_user_event_music ( + id INTEGER, + event_id INTEGER, + type INTEGER, + music_id INTEGER, + level INTEGER, + tech_score_max INTEGER, + platinum_score_max INTEGER, + tech_record_date VARCHAR (255), + is_tech_new_record BOOLEAN, + user_id BIGINT REFERENCES ongeki_user_data (id) ON DELETE CASCADE, + PRIMARY KEY ( + id + ), + CONSTRAINT ongeki_user_event_music_uq UNIQUE ( + event_id, + type, + music_id, + user_id + ) + ON CONFLICT REPLACE +); \ No newline at end of file