[+] Ongeki: Solve Re:Fresh conflicts

pull/134/head
Azalea 2025-03-26 20:56:21 -04:00
parent 278b0205fc
commit a2b27090db
18 changed files with 206 additions and 1392 deletions

View File

@ -6,6 +6,8 @@ import icu.samnyan.aqua.net.games.GenericUserDataRepo
import icu.samnyan.aqua.net.games.GenericUserMusicRepo
import icu.samnyan.aqua.net.games.IUserRepo
import icu.samnyan.aqua.sega.ongeki.model.*
import icu.samnyan.aqua.sega.ongeki.model.UserEventMap
import icu.samnyan.aqua.sega.ongeki.model.UserSkin
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.jpa.repository.JpaRepository
@ -144,6 +146,10 @@ interface OgkUserTrainingRoomRepo : OngekiUserLinked<UserTrainingRoom> {
fun findByUserAndRoomId(user: UserData, roomId: Int): Optional<UserTrainingRoom>
}
// Re:Fresh
interface OgkUserEventMapRepo : OngekiUserLinked<UserEventMap>
interface OgkUserSkinRepo : OngekiUserLinked<UserSkin>
interface OgkGameCardRepo : JpaRepository<GameCard, Long>
interface OgkGameCharaRepo : JpaRepository<GameChara, Long>
interface OgkGameEventRepo : JpaRepository<GameEvent, Long>
@ -181,6 +187,8 @@ class OngekiUserRepos(
val techEvent: OgkUserTechEventRepo,
val tradeItem: OgkUserTradeItemRepo,
val trainingRoom: OgkUserTrainingRoomRepo,
val eventMap: OgkUserEventMapRepo,
val skin: OgkUserSkinRepo,
)
@Component

View File

@ -1,23 +0,0 @@
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<UserEventMap, Long> {
Optional<UserEventMap> findByUser(UserData userData);
Optional<UserEventMap> findByUser_Card_ExtId(long userId);
@Transactional
void deleteByUser(UserData user);
}

View File

@ -1,21 +0,0 @@
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.UserSkin;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("OngekiUserSkinRepository")
public interface UserSkinRepository extends JpaRepository<UserSkin, Long> {
List<UserSkin> findByUser_Card_ExtId(long userId);
@Transactional
void deleteByUser(UserData user);
}

View File

@ -2,7 +2,7 @@ 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.ongeki.OgkUserEventMapRepo;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -22,10 +22,10 @@ public class GetUserEventMapHandler implements BaseHandler {
private final BasicMapper mapper;
private final UserEventMapRepository userEventMapRepository;
private final OgkUserEventMapRepo userEventMapRepository;
@Autowired
public GetUserEventMapHandler(BasicMapper mapper, UserEventMapRepository userEventMapRepository) {
public GetUserEventMapHandler(BasicMapper mapper, OgkUserEventMapRepo userEventMapRepository) {
this.mapper = mapper;
this.userEventMapRepository = userEventMapRepository;
}

View File

@ -2,8 +2,8 @@ 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.UserSkinRepository;
import icu.samnyan.aqua.sega.ongeki.model.userdata.UserSkin;
import icu.samnyan.aqua.sega.ongeki.OgkUserSkinRepo;
import icu.samnyan.aqua.sega.ongeki.model.UserSkin;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -24,10 +24,10 @@ public class GetUserSkinHandler implements BaseHandler {
private final BasicMapper mapper;
private final UserSkinRepository userSkinRepository;
private final OgkUserSkinRepo userSkinRepository;
@Autowired
public GetUserSkinHandler(BasicMapper mapper, UserSkinRepository userSkinRepository) {
public GetUserSkinHandler(BasicMapper mapper, OgkUserSkinRepo userSkinRepository) {
this.mapper = mapper;
this.userSkinRepository = userSkinRepository;
}

View File

@ -1,634 +0,0 @@
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.general.model.Card;
import icu.samnyan.aqua.sega.general.model.response.UserRecentRating;
import icu.samnyan.aqua.sega.general.service.CardService;
import icu.samnyan.aqua.sega.ongeki.dao.userdata.*;
import icu.samnyan.aqua.sega.ongeki.model.gamedata.OngekiFumenScore;
import icu.samnyan.aqua.sega.ongeki.model.request.UpsertUserAll;
import icu.samnyan.aqua.sega.ongeki.model.response.CodeResp;
import icu.samnyan.aqua.sega.ongeki.model.userdata.*;
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.List;
import java.util.Map;
import java.util.Optional;
/**
* The handler for saving all data of a ONGEKI profile
*
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("OngekiUserAllHandler")
public class UpsertUserAllHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(UpsertUserAllHandler.class);
private final BasicMapper mapper;
private final CardService cardService;
private final UserDataRepository userDataRepository;
private final UserOptionRepository userOptionRepository;
private final UserPlaylogRepository userPlaylogRepository;
private final UserActivityRepository userActivityRepository;
private final UserMusicDetailRepository userMusicDetailRepository;
private final UserCharacterRepository userCharacterRepository;
private final UserCardRepository userCardRepository;
private final UserDeckRepository userDeckRepository;
private final UserStoryRepository userStoryRepository;
private final UserChapterRepository userChapterRepository;
private final UserMemoryChapterRepository userMemoryChapterRepository;
private final UserItemRepository userItemRepository;
private final UserMusicItemRepository userMusicItemRepository;
private final UserLoginBonusRepository userLoginBonusRepository;
private final UserEventPointRepository userEventPointRepository;
private final UserMissionPointRepository userMissionPointRepository;
private final UserTrainingRoomRepository userTrainingRoomRepository;
private final UserGeneralDataRepository userGeneralDataRepository;
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;
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, UserEventMapRepository userEventMapRepository) {
this.mapper = mapper;
this.cardService = cardService;
this.userDataRepository = userDataRepository;
this.userOptionRepository = userOptionRepository;
this.userPlaylogRepository = userPlaylogRepository;
this.userActivityRepository = userActivityRepository;
this.userMusicDetailRepository = userMusicDetailRepository;
this.userCharacterRepository = userCharacterRepository;
this.userCardRepository = userCardRepository;
this.userDeckRepository = userDeckRepository;
this.userStoryRepository = userStoryRepository;
this.userChapterRepository = userChapterRepository;
this.userMemoryChapterRepository = userMemoryChapterRepository;
this.userItemRepository = userItemRepository;
this.userMusicItemRepository = userMusicItemRepository;
this.userLoginBonusRepository = userLoginBonusRepository;
this.userEventPointRepository = userEventPointRepository;
this.userMissionPointRepository = userMissionPointRepository;
this.userTrainingRoomRepository = userTrainingRoomRepository;
this.userGeneralDataRepository = userGeneralDataRepository;
this.userBossRepository = userBossRepository;
this.userScenarioRepository = userScenarioRepository;
this.userTechCountRepository = userTechCountRepository;
this.userTradeItemRepository = userTradeItemRepository;
this.userEventMusicRepository = userEventMusicRepository;
this.userTechEventRepository = userTechEventRepository;
this.userKopRepository = userKopRepository;
this.userEventMapRepository = userEventMapRepository;
}
@Override
public String handle(Map<String, ?> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
UpsertUserAll upsertUserAll = mapper.convert(request.get("upsertUserAll"), UpsertUserAll.class);
// All the field should exist, no need to check now.
// UserData
UserData newUserData;
{
UserData userData;
Optional<UserData> userOptional = userDataRepository.findByCard_ExtId(userId);
// UserData might be empty on later runs
if (userOptional.isEmpty() && upsertUserAll.getUserData().isEmpty()) {
return null;
}
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
userData = new UserData();
Card card = cardService.getCardByExtId(userId).orElseThrow();
userData.setCard(card);
}
// If new data exists, use new data. Otherwise, use old data
newUserData = !upsertUserAll.getUserData().isEmpty() ? upsertUserAll.getUserData().getFirst() : userData;
newUserData.setId(userData.getId());
newUserData.setCard(userData.getCard());
// Set eventWatchedDate with lastPlayDate, because client doesn't update it
newUserData.setEventWatchedDate(userData.getLastPlayDate());
newUserData.setCmEventWatchedDate(userData.getLastPlayDate());
userDataRepository.save(newUserData);
}
// UserOption
UserOption newUserOption = upsertUserAll.getUserOption().getFirst();
Optional<UserOption> userOptionOptional = userOptionRepository.findByUser(newUserData);
UserOption userOption = userOptionOptional.orElseGet(() -> new UserOption(newUserData));
newUserOption.setId(userOption.getId());
newUserOption.setUser(userOption.getUser());
userOptionRepository.save(newUserOption);
// UserPlaylogList
List<UserPlaylog> userPlaylogList = upsertUserAll.getUserPlaylogList();
List<UserPlaylog> newUserPlaylogList = new ArrayList<>();
for (UserPlaylog newUserPlaylog : userPlaylogList) {
newUserPlaylog.setUser(newUserData);
newUserPlaylogList.add(newUserPlaylog);
}
userPlaylogRepository.saveAll(newUserPlaylogList);
// UserSessionlogList, UserJewelboostlogLost doesn't need to be saved for a private server
// UserActivityList
List<UserActivity> userActivityList = upsertUserAll.getUserActivityList();
List<UserActivity> newUserActivityList = new ArrayList<>();
for (UserActivity newUserActivity : userActivityList) {
int kind = newUserActivity.getKind();
int id = newUserActivity.getActivityId();
if (kind != 0 && id != 0) {
Optional<UserActivity> activityOptional = userActivityRepository.findByUserAndKindAndActivityId(newUserData, kind, id);
UserActivity userActivity = activityOptional.orElseGet(() -> new UserActivity(newUserData));
newUserActivity.setId(userActivity.getId());
newUserActivity.setUser(newUserData);
newUserActivityList.add(newUserActivity);
}
}
newUserActivityList.sort((a, b) -> Integer.compare(b.getSortNumber(), a.getSortNumber()));
userActivityRepository.saveAll(newUserActivityList);
// UserRecentRatingList
// This thing still need to save to solve the rating drop
this.saveRecentRatingData(upsertUserAll.getUserRecentRatingList(), newUserData, "recent_rating_list");
/*
* The rating and battle point calculation is little bit complex.
* So I just create a UserGeneralData class to store this value
* into a csv format for convenience
*/
// UserBpBaseList (For calculating Battle point)
this.saveRecentRatingData(upsertUserAll.getUserBpBaseList(), newUserData, "battle_point_base");
// This is the best rating of all charts. Best 30 + 10 after that.
// userRatingBaseBestList
this.saveRecentRatingData(upsertUserAll.getUserRatingBaseBestList(), newUserData, "rating_base_best");
// userRatingBaseNextList
this.saveRecentRatingData(upsertUserAll.getUserRatingBaseNextList(), newUserData, "rating_base_next");
// This is the best rating of new charts. Best 15 + 10 after that.
// New chart means same version
// userRatingBaseBestNewList
this.saveRecentRatingData(upsertUserAll.getUserRatingBaseBestNewList(), newUserData, "rating_base_new_best");
// userRatingBaseNextNewList
this.saveRecentRatingData(upsertUserAll.getUserRatingBaseNextNewList(), newUserData, "rating_base_new_next");
// This is the recent best
// userRatingBaseHotList
this.saveRecentRatingData(upsertUserAll.getUserRatingBaseHotList(), newUserData, "rating_base_hot_best");
// userRatingBaseHotNextList
this.saveRecentRatingData(upsertUserAll.getUserRatingBaseHotNextList(), newUserData, "rating_base_hot_next");
this.saveFumenScoreData(upsertUserAll.getUserNewRatingBaseBestList(), newUserData, "new_rating_base_best");
this.saveFumenScoreData(upsertUserAll.getUserNewRatingBaseNextBestList(), newUserData, "new_rating_base_next_best");
this.saveFumenScoreData(upsertUserAll.getUserNewRatingBaseBestNewList(), newUserData, "new_rating_base_new_best");
this.saveFumenScoreData(upsertUserAll.getUserNewRatingBaseNextBestNewList(), newUserData, "new_rating_base_new_next_best");
this.saveFumenScoreData(upsertUserAll.getUserNewRatingBasePScoreList(), newUserData, "new_rating_base_pscore");
this.saveFumenScoreData(upsertUserAll.getUserNewRatingBaseNextPScoreList(), newUserData, "new_rating_base_next_pscore");
// UserMusicDetailList
List<UserMusicDetail> userMusicDetailList = upsertUserAll.getUserMusicDetailList();
List<UserMusicDetail> newUserMusicDetailList = new ArrayList<>();
for (UserMusicDetail newUserMusicDetail : userMusicDetailList) {
int musicId = newUserMusicDetail.getMusicId();
int level = newUserMusicDetail.getLevel();
Optional<UserMusicDetail> musicDetailOptional = userMusicDetailRepository.findByUserAndMusicIdAndLevel(newUserData, musicId, level);
UserMusicDetail userMusicDetail = musicDetailOptional.orElseGet(() -> new UserMusicDetail(newUserData));
newUserMusicDetail.setId(userMusicDetail.getId());
newUserMusicDetail.setUser(newUserData);
newUserMusicDetailList.add(newUserMusicDetail);
}
userMusicDetailRepository.saveAll(newUserMusicDetailList);
// UserCharacterList
List<UserCharacter> userCharacterList = upsertUserAll.getUserCharacterList();
List<UserCharacter> newUserCharacterList = new ArrayList<>();
for (UserCharacter newUserCharacter : userCharacterList) {
int characterId = newUserCharacter.getCharacterId();
Optional<UserCharacter> characterOptional = userCharacterRepository.findByUserAndCharacterId(newUserData, characterId);
UserCharacter userCharacter = characterOptional.orElseGet(() -> new UserCharacter(newUserData));
newUserCharacter.setId(userCharacter.getId());
newUserCharacter.setUser(newUserData);
newUserCharacterList.add(newUserCharacter);
}
userCharacterRepository.saveAll(newUserCharacterList);
// UserCardList
List<UserCard> userCardList = upsertUserAll.getUserCardList();
List<UserCard> newUserCardList = new ArrayList<>();
for (UserCard newUserCard : userCardList) {
int cardId = newUserCard.getCardId();
Optional<UserCard> cardOptional = userCardRepository.findByUserAndCardId(newUserData, cardId);
UserCard userCard = cardOptional.orElseGet(() -> new UserCard(newUserData));
newUserCard.setId(userCard.getId());
newUserCard.setUser(newUserData);
newUserCardList.add(newUserCard);
}
userCardRepository.saveAll(newUserCardList);
// UserDeckList
List<UserDeck> userDeckList = upsertUserAll.getUserDeckList();
List<UserDeck> newUserDeckList = new ArrayList<>();
for (UserDeck newUserDeck : userDeckList) {
int deckId = newUserDeck.getDeckId();
Optional<UserDeck> deckOptional = userDeckRepository.findByUserAndDeckId(newUserData, deckId);
UserDeck userDeck = deckOptional.orElseGet(() -> new UserDeck(newUserData));
newUserDeck.setId(userDeck.getId());
newUserDeck.setUser(newUserData);
newUserDeckList.add(newUserDeck);
}
userDeckRepository.saveAll(newUserDeckList);
// userTrainingRoomList
List<UserTrainingRoom> userTrainingRoomList = upsertUserAll.getUserTrainingRoomList();
List<UserTrainingRoom> newUserTrainingRoomList = new ArrayList<>();
for (UserTrainingRoom newUserTrainingRoom : userTrainingRoomList) {
int roomId = newUserTrainingRoom.getRoomId();
Optional<UserTrainingRoom> trainingRoomOptional = userTrainingRoomRepository.findByUserAndRoomId(newUserData, roomId);
UserTrainingRoom trainingRoom = trainingRoomOptional.orElseGet(() -> new UserTrainingRoom(newUserData));
newUserTrainingRoom.setId(trainingRoom.getId());
newUserTrainingRoom.setUser(newUserData);
newUserTrainingRoomList.add(newUserTrainingRoom);
}
userTrainingRoomRepository.saveAll(newUserTrainingRoomList);
// UserStoryList
List<UserStory> userStoryList = upsertUserAll.getUserStoryList();
List<UserStory> newUserStoryList = new ArrayList<>();
for (UserStory newUserStory : userStoryList) {
int storyId = newUserStory.getStoryId();
Optional<UserStory> storyOptional = userStoryRepository.findByUserAndStoryId(newUserData, storyId);
UserStory userStory = storyOptional.orElseGet(() -> new UserStory(newUserData));
newUserStory.setId(userStory.getId());
newUserStory.setUser(newUserData);
newUserStoryList.add(newUserStory);
}
userStoryRepository.saveAll(newUserStoryList);
// UserChapterList
List<UserChapter> userChapterList = upsertUserAll.getUserChapterList();
List<UserChapter> newUserChapterList = new ArrayList<>();
for (UserChapter newUserChapter : userChapterList) {
int chapterId = newUserChapter.getChapterId();
Optional<UserChapter> chapterOptional = userChapterRepository.findByUserAndChapterId(newUserData, chapterId);
UserChapter userChapter = chapterOptional.orElseGet(() -> new UserChapter(newUserData));
newUserChapter.setId(userChapter.getId());
newUserChapter.setUser(newUserData);
newUserChapterList.add(newUserChapter);
}
userChapterRepository.saveAll(newUserChapterList);
// UserMemoryChapterList
List<UserMemoryChapter> userMemoryChapterList = upsertUserAll.getUserMemoryChapterList();
if (userMemoryChapterList != null) {
List<UserMemoryChapter> newUserMemoryChapterList = new ArrayList<>();
for (UserMemoryChapter newUserMemoryChapter : userMemoryChapterList) {
int chapterId = newUserMemoryChapter.getChapterId();
Optional<UserMemoryChapter> chapterOptional = userMemoryChapterRepository.findByUserAndChapterId(newUserData, chapterId);
UserMemoryChapter userChapter = chapterOptional.orElseGet(() -> new UserMemoryChapter(newUserData));
newUserMemoryChapter.setId(userChapter.getId());
newUserMemoryChapter.setUser(newUserData);
newUserMemoryChapterList.add(newUserMemoryChapter);
}
userMemoryChapterRepository.saveAll(newUserMemoryChapterList);
}
// UserItemList
List<UserItem> userItemList = upsertUserAll.getUserItemList();
List<UserItem> newUserItemList = new ArrayList<>();
for (UserItem newUserItem : userItemList) {
int itemKind = newUserItem.getItemKind();
int itemId = newUserItem.getItemId();
Optional<UserItem> itemOptional = userItemRepository.findByUserAndItemKindAndItemId(newUserData, itemKind, itemId);
UserItem userItem = itemOptional.orElseGet(() -> new UserItem(newUserData));
newUserItem.setId(userItem.getId());
newUserItem.setUser(newUserData);
newUserItemList.add(newUserItem);
}
userItemRepository.saveAll(newUserItemList);
// UserMusicItemList
List<UserMusicItem> userMusicItemList = upsertUserAll.getUserMusicItemList();
List<UserMusicItem> newUserMusicItemList = new ArrayList<>();
for (UserMusicItem newUserMusicItem : userMusicItemList) {
int musicId = newUserMusicItem.getMusicId();
Optional<UserMusicItem> musicItemOptional = userMusicItemRepository.findByUserAndMusicId(newUserData, musicId);
UserMusicItem userMusicItem = musicItemOptional.orElseGet(() -> new UserMusicItem(newUserData));
newUserMusicItem.setId(userMusicItem.getId());
newUserMusicItem.setUser(newUserData);
newUserMusicItemList.add(newUserMusicItem);
}
userMusicItemRepository.saveAll(newUserMusicItemList);
// userLoginBonusList
List<UserLoginBonus> userLoginBonusList = upsertUserAll.getUserLoginBonusList();
List<UserLoginBonus> newUserLoginBonusList = new ArrayList<>();
for (UserLoginBonus newUserLoginBonus : userLoginBonusList) {
int bonusId = newUserLoginBonus.getBonusId();
Optional<UserLoginBonus> loginBonusOptional = userLoginBonusRepository.findByUserAndBonusId(newUserData, bonusId);
UserLoginBonus userLoginBonus = loginBonusOptional.orElseGet(() -> new UserLoginBonus(newUserData));
newUserLoginBonus.setId(userLoginBonus.getId());
newUserLoginBonus.setUser(newUserData);
newUserLoginBonusList.add(newUserLoginBonus);
}
userLoginBonusRepository.saveAll(newUserLoginBonusList);
// UserEventPointList
List<UserEventPoint> userEventPointList = upsertUserAll.getUserEventPointList();
List<UserEventPoint> newUserEventPointList = new ArrayList<>();
for (UserEventPoint newUserEventPoint : userEventPointList) {
int eventId = newUserEventPoint.getEventId();
Optional<UserEventPoint> eventPointOptional = userEventPointRepository.findByUserAndEventId(newUserData, eventId);
UserEventPoint userEventPoint = eventPointOptional.orElseGet(() -> new UserEventPoint(newUserData));
newUserEventPoint.setId(userEventPoint.getId());
newUserEventPoint.setUser(newUserData);
newUserEventPointList.add(newUserEventPoint);
}
userEventPointRepository.saveAll(newUserEventPointList);
// UserMissionPointList
List<UserMissionPoint> userMissionPointList = upsertUserAll.getUserMissionPointList();
List<UserMissionPoint> newUserMissionPointList = new ArrayList<>();
for (UserMissionPoint newUserMissionPoint : userMissionPointList) {
int eventId = newUserMissionPoint.getEventId();
Optional<UserMissionPoint> userMissionPointOptional = userMissionPointRepository.findByUserAndEventId(newUserData, eventId);
UserMissionPoint userMissionPoint = userMissionPointOptional.orElseGet(() -> new UserMissionPoint(newUserData));
newUserMissionPoint.setId(userMissionPoint.getId());
newUserMissionPoint.setUser(newUserData);
newUserMissionPointList.add(newUserMissionPoint);
}
userMissionPointRepository.saveAll(newUserMissionPointList);
// UserRatinglogList (For the highest rating of each version)
// UserBossList
List<UserBoss> userBossList = upsertUserAll.getUserBossList();
if (userBossList != null) {
List<UserBoss> newUserBossList = new ArrayList<>();
for (UserBoss newUserBoss : userBossList) {
int musicId = newUserBoss.getMusicId();
Optional<UserBoss> 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<UserTechCount> userTechCountList = upsertUserAll.getUserTechCountList();
if (userTechCountList != null) {
List<UserTechCount> newUserTechCountList = new ArrayList<>();
for (UserTechCount newUserTechCount : userTechCountList) {
int levelId = newUserTechCount.getLevelId();
Optional<UserTechCount> 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<UserScenario> userScenarioList = upsertUserAll.getUserScenarioList();
if (userScenarioList != null) {
List<UserScenario> newUserScenarioList = new ArrayList<>();
for (UserScenario newUserScenario : userScenarioList) {
int scenarioId = newUserScenario.getScenarioId();
Optional<UserScenario> 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);
}
// UserTradeItemList
List<UserTradeItem> userTradeItemList = upsertUserAll.getUserTradeItemList();
List<UserTradeItem> newUserTradeItemList = new ArrayList<>();
for (UserTradeItem newUserTradeItem : userTradeItemList) {
int chapterId = newUserTradeItem.getChapterId();
int tradeItemId = newUserTradeItem.getTradeItemId();
Optional<UserTradeItem> 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<UserEventMusic> userEventMusicList = upsertUserAll.getUserEventMusicList();
List<UserEventMusic> newUserEventMusicList = new ArrayList<>();
for (UserEventMusic newUserEventMusic : userEventMusicList) {
int eventId = newUserEventMusic.getEventId();
int type = newUserEventMusic.getType();
int musicId = newUserEventMusic.getMusicId();
Optional<UserEventMusic> 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<UserTechEvent> userTechEventList = upsertUserAll.getUserTechEventList();
List<UserTechEvent> newUserTechEventList = new ArrayList<>();
for (UserTechEvent newUserTechEvent : userTechEventList) {
int eventId = newUserTechEvent.getEventId();
Optional<UserTechEvent> 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<UserKop> userKopList = upsertUserAll.getUserKopList();
List<UserKop> newUserKopList = new ArrayList<>();
for (UserKop newUserKop : userKopList) {
int kopId = newUserKop.getKopId();
int areaId = newUserKop.getAreaId();
Optional<UserKop> 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);
// UserEventMap
UserEventMap newUserEventMap = upsertUserAll.getUserEventMap();
if (newUserEventMap != null) {
Optional<UserEventMap> 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;
}
private void saveRecentRatingData(List<UserRecentRating> itemList, UserData newUserData, String key) {
StringBuilder sb = new StringBuilder();
// Convert to a string
for (UserRecentRating item :
itemList) {
sb.append(item.getMusicId()).append(":").append(item.getDifficultId()).append(":").append(item.getScore());
sb.append(",");
}
if (!sb.isEmpty()) {
sb.deleteCharAt(sb.length() - 1);
}
saveGeneralData(newUserData, key, sb.toString());
}
private void saveFumenScoreData(List<OngekiFumenScore> itemList, UserData newUserData, String key) {
StringBuilder sb = new StringBuilder();
for (OngekiFumenScore item : itemList) {
sb.append(item.getMusicId()).append(":")
.append(item.getDifficultId()).append(":")
.append(item.getScore()).append(":")
.append(item.getPlatinumScoreStar()).append(":")
.append(item.getPlatinumScoreMax());
sb.append(",");
}
if (!sb.isEmpty()) {
sb.deleteCharAt(sb.length() - 1);
}
saveGeneralData(newUserData, key, sb.toString());
}
private void saveGeneralData(UserData newUserData, String key, String data) {
Optional<UserGeneralData> uOptional = userGeneralDataRepository.findByUserAndPropertyKey(newUserData, key);
UserGeneralData userGeneralData = uOptional.orElseGet(() -> new UserGeneralData(newUserData, key));
userGeneralData.setPropertyValue(data);
userGeneralDataRepository.save(userGeneralData);
}
}

View File

@ -4,12 +4,13 @@ import ext.logger
import icu.samnyan.aqua.sega.general.BaseHandler
import icu.samnyan.aqua.sega.general.model.response.UserRecentRating
import icu.samnyan.aqua.sega.general.service.CardService
import icu.samnyan.aqua.sega.ongeki.*
import icu.samnyan.aqua.sega.ongeki.OngekiUserRepos
import icu.samnyan.aqua.sega.ongeki.model.*
import icu.samnyan.aqua.sega.util.jackson.BasicMapper
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
/**
* The handler for saving all data of a ONGEKI profile
* @author samnyan (privateamusement@protonmail.com)
@ -18,35 +19,11 @@ import org.springframework.stereotype.Component
class UpsertUserAllHandler @Autowired constructor(
private val mapper: BasicMapper,
private val cardService: CardService,
private val userDataRepository: OgkUserDataRepo,
private val userOptionRepository: OgkUserOptionRepo,
private val userPlaylogRepository: OgkUserPlaylogRepo,
private val userActivityRepository: OgkUserActivityRepo,
private val userMusicDetailRepository: OgkUserMusicDetailRepo,
private val userCharacterRepository: OgkUserCharacterRepo,
private val userCardRepository: OgkUserCardRepo,
private val userDeckRepository: OgkUserDeckRepo,
private val userStoryRepository: OgkUserStoryRepo,
private val userChapterRepository: OgkUserChapterRepo,
private val userItemRepository: OgkUserItemRepo,
private val userMusicItemRepository: OgkUserMusicItemRepo,
private val userLoginBonusRepository: OgkUserLoginBonusRepo,
private val userEventPointRepository: OgkUserEventPointRepo,
private val userMissionPointRepository: OgkUserMissionPointRepo,
private val userTrainingRoomRepository: OgkUserTrainingRoomRepo,
private val userGeneralDataRepository: OgkUserGeneralDataRepo,
private val userBossRepository: OgkUserBossRepo,
private val userScenarioRepository: OgkUserScenarioRepo,
private val userTechCountRepository: OgkUserTechCountRepo,
private val userTradeItemRepository: OgkUserTradeItemRepo,
private val userEventMusicRepository: OgkUserEventMusicRepo,
private val userTechEventRepository: OgkUserTechEventRepo,
private val userKopRepository: OgkUserKopRepo,
private val userMemoryChapterRepository: OgkUserMemoryChapterRepo
val db: OngekiUserRepos
) : BaseHandler {
override fun handle(request: Map<String, Any>): String? {
val userId = (request["userId"] as Number).toLong()
val upsertUserAll = mapper.convert(
val all = mapper.convert(
request["upsertUserAll"]!!,
UpsertUserAll::class.java
)
@ -56,10 +33,10 @@ class UpsertUserAllHandler @Autowired constructor(
val u: UserData
run {
val userData: UserData
val userOptional = userDataRepository.findByCard_ExtId(userId)
val userOptional = db.data.findByCard_ExtId(userId)
// UserData might be empty on later runs
if (userOptional.isEmpty && upsertUserAll.userData.isNullOrEmpty()) {
if (userOptional.isEmpty && all.userData.isNullOrEmpty()) {
return null
}
@ -72,7 +49,7 @@ class UpsertUserAllHandler @Autowired constructor(
}
// If new data exists, use new data. Otherwise, use old data
u = if (!upsertUserAll.userData.isNullOrEmpty()) upsertUserAll.userData!![0] else userData
u = if (!all.userData.isNullOrEmpty()) all.userData!![0] else userData
u.id = userData.id
u.card = userData.card
@ -80,24 +57,24 @@ class UpsertUserAllHandler @Autowired constructor(
// Set eventWatchedDate with lastPlayDate, because client doesn't update it
u.eventWatchedDate = userData.lastPlayDate
u.cmEventWatchedDate = userData.lastPlayDate
userDataRepository.save(u)
db.data.save(u)
}
// UserOption
val newUserOption = upsertUserAll.userOption!![0]
val newUserOption = all.userOption!![0]
val userOptionOptional = userOptionRepository.findSingleByUser(u)
val userOptionOptional = db.option.findSingleByUser(u)
val userOption = userOptionOptional.orElseGet { UserOption().apply { user = u } }
newUserOption.id = userOption.id
newUserOption.user = userOption.user
userOptionRepository.save(newUserOption)
db.option.save(newUserOption)
// UserPlaylogList
val userPlaylogList = upsertUserAll.userPlaylogList
val userPlaylogList = all.userPlaylogList
val newUserPlaylogList: MutableList<UserPlaylog> = ArrayList()
if (userPlaylogList != null) {
@ -107,14 +84,14 @@ class UpsertUserAllHandler @Autowired constructor(
}
}
userPlaylogRepository.saveAll(newUserPlaylogList)
db.playlog.saveAll(newUserPlaylogList)
// UserSessionlogList, UserJewelboostlogLost doesn't need to be saved for a private server
// UserActivityList
val userActivityList = upsertUserAll.userActivityList
val userActivityList = all.userActivityList
val newUserActivityList: MutableList<UserActivity> = ArrayList()
if (userActivityList != null) {
@ -123,7 +100,7 @@ class UpsertUserAllHandler @Autowired constructor(
val id = newUserActivity.activityId
if (kind != 0 && id != 0) {
val activityOptional = userActivityRepository.findByUserAndKindAndActivityId(u, kind, id)
val activityOptional = db.activity.findByUserAndKindAndActivityId(u, kind, id)
val userActivity = activityOptional.orElseGet {
UserActivity().apply { user = u }
}
@ -135,12 +112,12 @@ class UpsertUserAllHandler @Autowired constructor(
}
}
newUserActivityList.sortWith { a, b -> b.sortNumber.compareTo(a.sortNumber) }
userActivityRepository.saveAll(newUserActivityList)
db.activity.saveAll(newUserActivityList)
// UserRecentRatingList
// This thing still need to save to solve the rating drop
upsertUserAll.userRecentRatingList?.let { this.saveGeneralData(it, u, "recent_rating_list") }
all.userRecentRatingList?.let { this.saveRecentRatingData(it, u, "recent_rating_list") }
/*
* The rating and battle point calculation is little bit complex.
@ -148,35 +125,40 @@ class UpsertUserAllHandler @Autowired constructor(
* into a csv format for convenience
*/
// UserBpBaseList (For calculating Battle point)
upsertUserAll.userBpBaseList?.let { this.saveGeneralData(it, u, "battle_point_base") }
all.userBpBaseList?.let { this.saveRecentRatingData(it, u, "battle_point_base") }
// This is the best rating of all charts. Best 30 + 10 after that.
// userRatingBaseBestList
upsertUserAll.userRatingBaseBestList?.let { this.saveGeneralData(it, u, "rating_base_best") }
all.userRatingBaseBestList?.let { this.saveRecentRatingData(it, u, "rating_base_best") }
// userRatingBaseNextList
upsertUserAll.userRatingBaseNextList?.let { this.saveGeneralData(it, u, "rating_base_next") }
all.userRatingBaseNextList?.let { this.saveRecentRatingData(it, u, "rating_base_next") }
// This is the best rating of new charts. Best 15 + 10 after that.
// New chart means same version
// userRatingBaseBestNewList
upsertUserAll.userRatingBaseBestNewList?.let { this.saveGeneralData(it, u, "rating_base_new_best") }
all.userRatingBaseBestNewList?.let { this.saveRecentRatingData(it, u, "rating_base_new_best") }
// userRatingBaseNextNewList
upsertUserAll.userRatingBaseNextNewList?.let { this.saveGeneralData(it, u, "rating_base_new_next") }
all.userRatingBaseNextNewList?.let { this.saveRecentRatingData(it, u, "rating_base_new_next") }
// This is the recent best
// userRatingBaseHotList
upsertUserAll.userRatingBaseHotList?.let { this.saveGeneralData(it, u, "rating_base_hot_best") }
all.userRatingBaseHotList?.let { this.saveRecentRatingData(it, u, "rating_base_hot_best") }
// userRatingBaseHotNextList
upsertUserAll.userRatingBaseHotNextList?.let { this.saveGeneralData(it, u, "rating_base_hot_next") }
all.userRatingBaseHotNextList?.let { this.saveRecentRatingData(it, u, "rating_base_hot_next") }
// Re:Fresh
all.userNewRatingBaseBestList?.let { this.saveFumenScoreData(it, u, "new_rating_base_best") }
all.userNewRatingBaseNextBestList?.let { this.saveFumenScoreData(it, u, "new_rating_base_next_best") }
all.userNewRatingBaseBestNewList?.let { this.saveFumenScoreData(it, u, "new_rating_base_new_best") }
all.userNewRatingBaseNextBestNewList?.let { this.saveFumenScoreData(it, u, "new_rating_base_new_next_best") }
all.userNewRatingBasePScoreList?.let { this.saveFumenScoreData(it, u, "new_rating_base_pscore") }
all.userNewRatingBaseNextPScoreList?.let { this.saveFumenScoreData(it, u, "new_rating_base_next_pscore") }
// UserMusicDetailList
val userMusicDetailList = upsertUserAll.userMusicDetailList
val userMusicDetailList = all.userMusicDetailList
val newUserMusicDetailList: MutableList<UserMusicDetail> = ArrayList()
if (userMusicDetailList != null) {
@ -185,7 +167,7 @@ class UpsertUserAllHandler @Autowired constructor(
val level = newUserMusicDetail.level
val musicDetailOptional =
userMusicDetailRepository.findByUserAndMusicIdAndLevel(u, musicId, level)
db.musicDetail.findByUserAndMusicIdAndLevel(u, musicId, level)
val userMusicDetail = musicDetailOptional.orElseGet {
UserMusicDetail().apply { user = u }
}
@ -195,18 +177,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserMusicDetailList.add(newUserMusicDetail)
}
}
userMusicDetailRepository.saveAll(newUserMusicDetailList)
db.musicDetail.saveAll(newUserMusicDetailList)
// UserCharacterList
val userCharacterList = upsertUserAll.userCharacterList
val userCharacterList = all.userCharacterList
val newUserCharacterList: MutableList<UserCharacter> = ArrayList()
if (userCharacterList != null) {
for (newUserCharacter in userCharacterList) {
val characterId = newUserCharacter.characterId
val characterOptional = userCharacterRepository.findByUserAndCharacterId(u, characterId)
val characterOptional = db.character.findByUserAndCharacterId(u, characterId)
val userCharacter = characterOptional.orElseGet {
UserCharacter().apply { user = u }
}
@ -216,17 +198,17 @@ class UpsertUserAllHandler @Autowired constructor(
newUserCharacterList.add(newUserCharacter)
}
}
userCharacterRepository.saveAll(newUserCharacterList)
db.character.saveAll(newUserCharacterList)
// UserCardList
val userCardList = upsertUserAll.userCardList
val userCardList = all.userCardList
val newUserCardList: MutableList<UserCard> = ArrayList()
if (userCardList != null) {
for (newUserCard in userCardList) {
val cardId = newUserCard.cardId
val cardOptional = userCardRepository.findByUserAndCardId(u, cardId)
val cardOptional = db.card.findByUserAndCardId(u, cardId)
val userCard = cardOptional.orElseGet { UserCard().apply { user = u } }
newUserCard.id = userCard.id
@ -234,18 +216,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserCardList.add(newUserCard)
}
}
userCardRepository.saveAll(newUserCardList)
db.card.saveAll(newUserCardList)
// UserDeckList
val userDeckList = upsertUserAll.userDeckList
val userDeckList = all.userDeckList
val newUserDeckList: MutableList<UserDeck> = ArrayList()
if (userDeckList != null) {
for (newUserDeck in userDeckList) {
val deckId = newUserDeck.deckId
val deckOptional = userDeckRepository.findByUserAndDeckId(u, deckId)
val deckOptional = db.deck.findByUserAndDeckId(u, deckId)
val userDeck = deckOptional.orElseGet { UserDeck().apply { user = u } }
newUserDeck.id = userDeck.id
@ -253,18 +235,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserDeckList.add(newUserDeck)
}
}
userDeckRepository.saveAll(newUserDeckList)
db.deck.saveAll(newUserDeckList)
// userTrainingRoomList
val userTrainingRoomList = upsertUserAll.userTrainingRoomList
val userTrainingRoomList = all.userTrainingRoomList
val newUserTrainingRoomList: MutableList<UserTrainingRoom> = ArrayList()
if (userTrainingRoomList != null) {
for (newUserTrainingRoom in userTrainingRoomList) {
val roomId = newUserTrainingRoom.roomId
val trainingRoomOptional = userTrainingRoomRepository.findByUserAndRoomId(u, roomId)
val trainingRoomOptional = db.trainingRoom.findByUserAndRoomId(u, roomId)
val trainingRoom = trainingRoomOptional.orElseGet { UserTrainingRoom().apply { user = u } }
newUserTrainingRoom.id = trainingRoom.id
@ -272,18 +254,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserTrainingRoomList.add(newUserTrainingRoom)
}
}
userTrainingRoomRepository.saveAll(newUserTrainingRoomList)
db.trainingRoom.saveAll(newUserTrainingRoomList)
// UserStoryList
val userStoryList = upsertUserAll.userStoryList
val userStoryList = all.userStoryList
val newUserStoryList: MutableList<UserStory> = ArrayList()
if (userStoryList != null) {
for (newUserStory in userStoryList) {
val storyId = newUserStory.storyId
val storyOptional = userStoryRepository.findByUserAndStoryId(u, storyId)
val storyOptional = db.story.findByUserAndStoryId(u, storyId)
val userStory = storyOptional.orElseGet { UserStory().apply { user = u } }
newUserStory.id = userStory.id
@ -291,18 +273,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserStoryList.add(newUserStory)
}
}
userStoryRepository.saveAll(newUserStoryList)
db.story.saveAll(newUserStoryList)
// UserChapterList
val userChapterList = upsertUserAll.userChapterList
val userChapterList = all.userChapterList
val newUserChapterList: MutableList<UserChapter> = ArrayList()
if (userChapterList != null) {
for (newUserChapter in userChapterList) {
val chapterId = newUserChapter.chapterId
val chapterOptional = userChapterRepository.findByUserAndChapterId(u, chapterId)
val chapterOptional = db.chapter.findByUserAndChapterId(u, chapterId)
val userChapter = chapterOptional.orElseGet { UserChapter().apply { user = u } }
newUserChapter.id = userChapter.id
@ -310,11 +292,11 @@ class UpsertUserAllHandler @Autowired constructor(
newUserChapterList.add(newUserChapter)
}
}
userChapterRepository.saveAll(newUserChapterList)
db.chapter.saveAll(newUserChapterList)
// UserMemoryChapterList
val userMemoryChapterList = upsertUserAll.userMemoryChapterList
val userMemoryChapterList = all.userMemoryChapterList
if (userMemoryChapterList != null) {
val newUserMemoryChapterList: MutableList<UserMemoryChapter> = ArrayList()
@ -322,18 +304,18 @@ class UpsertUserAllHandler @Autowired constructor(
for (newUserMemoryChapter in userMemoryChapterList) {
val chapterId = newUserMemoryChapter.chapterId
val chapterOptional = userMemoryChapterRepository.findByUserAndChapterId(u, chapterId)
val chapterOptional = db.memoryChapter.findByUserAndChapterId(u, chapterId)
val userChapter = chapterOptional.orElseGet { UserMemoryChapter().apply { user = u } }
newUserMemoryChapter.id = userChapter.id
newUserMemoryChapter.user = u
newUserMemoryChapterList.add(newUserMemoryChapter)
}
userMemoryChapterRepository.saveAll(newUserMemoryChapterList)
db.memoryChapter.saveAll(newUserMemoryChapterList)
}
// UserItemList
val userItemList = upsertUserAll.userItemList
val userItemList = all.userItemList
val newUserItemList: MutableList<UserItem> = ArrayList()
if (userItemList != null) {
@ -341,7 +323,7 @@ class UpsertUserAllHandler @Autowired constructor(
val itemKind = newUserItem.itemKind
val itemId = newUserItem.itemId
val itemOptional = userItemRepository.findByUserAndItemKindAndItemId(u, itemKind, itemId)
val itemOptional = db.item.findByUserAndItemKindAndItemId(u, itemKind, itemId)
val userItem = itemOptional.orElseGet { UserItem().apply { user = u } }
newUserItem.id = userItem.id
@ -349,17 +331,17 @@ class UpsertUserAllHandler @Autowired constructor(
newUserItemList.add(newUserItem)
}
}
userItemRepository.saveAll(newUserItemList)
db.item.saveAll(newUserItemList)
// UserMusicItemList
val userMusicItemList = upsertUserAll.userMusicItemList
val userMusicItemList = all.userMusicItemList
val newUserMusicItemList: MutableList<UserMusicItem> = ArrayList()
if (userMusicItemList != null) {
for (newUserMusicItem in userMusicItemList) {
val musicId = newUserMusicItem.musicId
val musicItemOptional = userMusicItemRepository.findByUserAndMusicId(u, musicId)
val musicItemOptional = db.musicItem.findByUserAndMusicId(u, musicId)
val userMusicItem = musicItemOptional.orElseGet { UserMusicItem().apply { user = u } }
newUserMusicItem.id = userMusicItem.id
@ -367,18 +349,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserMusicItemList.add(newUserMusicItem)
}
}
userMusicItemRepository.saveAll(newUserMusicItemList)
db.musicItem.saveAll(newUserMusicItemList)
// userLoginBonusList
val userLoginBonusList = upsertUserAll.userLoginBonusList
val userLoginBonusList = all.userLoginBonusList
val newUserLoginBonusList: MutableList<UserLoginBonus> = ArrayList()
if (userLoginBonusList != null) {
for (newUserLoginBonus in userLoginBonusList) {
val bonusId = newUserLoginBonus.bonusId
val loginBonusOptional = userLoginBonusRepository.findByUserAndBonusId(u, bonusId)
val loginBonusOptional = db.loginBonus.findByUserAndBonusId(u, bonusId)
val userLoginBonus = loginBonusOptional.orElseGet {
UserLoginBonus().apply { user = u }
}
@ -388,18 +370,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserLoginBonusList.add(newUserLoginBonus)
}
}
userLoginBonusRepository.saveAll(newUserLoginBonusList)
db.loginBonus.saveAll(newUserLoginBonusList)
// UserEventPointList
val userEventPointList = upsertUserAll.userEventPointList
val userEventPointList = all.userEventPointList
val newUserEventPointList: MutableList<UserEventPoint> = ArrayList()
if (userEventPointList != null) {
for (newUserEventPoint in userEventPointList) {
val eventId = newUserEventPoint.eventId
val eventPointOptional = userEventPointRepository.findByUserAndEventId(u, eventId)
val eventPointOptional = db.eventPoint.findByUserAndEventId(u, eventId)
val userEventPoint = eventPointOptional.orElseGet { UserEventPoint().apply { user = u } }
newUserEventPoint.id = userEventPoint.id
@ -407,18 +389,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserEventPointList.add(newUserEventPoint)
}
}
userEventPointRepository.saveAll(newUserEventPointList)
db.eventPoint.saveAll(newUserEventPointList)
// UserMissionPointList
val userMissionPointList = upsertUserAll.userMissionPointList
val userMissionPointList = all.userMissionPointList
val newUserMissionPointList: MutableList<UserMissionPoint> = ArrayList()
if (userMissionPointList != null) {
for (newUserMissionPoint in userMissionPointList) {
val eventId = newUserMissionPoint.eventId
val userMissionPointOptional = userMissionPointRepository.findByUserAndEventId(u, eventId)
val userMissionPointOptional = db.missionPoint.findByUserAndEventId(u, eventId)
val userMissionPoint = userMissionPointOptional.orElseGet { UserMissionPoint().apply { user = u } }
newUserMissionPoint.id = userMissionPoint.id
@ -426,18 +408,18 @@ class UpsertUserAllHandler @Autowired constructor(
newUserMissionPointList.add(newUserMissionPoint)
}
}
userMissionPointRepository.saveAll(newUserMissionPointList)
db.missionPoint.saveAll(newUserMissionPointList)
// UserRatinglogList (For the highest rating of each version)
// UserBossList
val userBossList = upsertUserAll.userBossList
val userBossList = all.userBossList
if (userBossList != null) {
val newUserBossList: MutableList<UserBoss> = ArrayList()
for (newUserBoss in userBossList) {
val musicId = newUserBoss.musicId
val userBossOptional = userBossRepository.findByUserAndMusicId(u, musicId)
val userBossOptional = db.boss.findByUserAndMusicId(u, musicId)
val userBoss = userBossOptional.orElseGet {
UserBoss().apply { user = u }
}
@ -446,45 +428,45 @@ class UpsertUserAllHandler @Autowired constructor(
newUserBoss.user = userBoss.user
newUserBossList.add(newUserBoss)
}
userBossRepository.saveAll(newUserBossList)
db.boss.saveAll(newUserBossList)
}
// UserTechCountList
val userTechCountList = upsertUserAll.userTechCountList
val userTechCountList = all.userTechCountList
if (userTechCountList != null) {
val newUserTechCountList: MutableList<UserTechCount> = ArrayList()
for (newUserTechCount in userTechCountList) {
val levelId = newUserTechCount.levelId
val userTechCountOptional = userTechCountRepository.findByUserAndLevelId(u, levelId)
val userTechCountOptional = db.techCount.findByUserAndLevelId(u, levelId)
val userTechCount = userTechCountOptional.orElseGet { UserTechCount().apply { user = u } }
newUserTechCount.id = userTechCount.id
newUserTechCount.user = userTechCount.user
newUserTechCountList.add(newUserTechCount)
}
userTechCountRepository.saveAll(newUserTechCountList)
db.techCount.saveAll(newUserTechCountList)
}
// UserScenarioList
val userScenarioList = upsertUserAll.userScenarioList
val userScenarioList = all.userScenarioList
if (userScenarioList != null) {
val newUserScenarioList: MutableList<UserScenario> = ArrayList()
for (newUserScenario in userScenarioList) {
val scenarioId = newUserScenario.scenarioId
val userScenarioOptional = userScenarioRepository.findByUserAndScenarioId(u, scenarioId)
val userScenarioOptional = db.scenario.findByUserAndScenarioId(u, scenarioId)
val userScenario = userScenarioOptional.orElseGet { UserScenario().apply { user = u } }
newUserScenario.id = userScenario.id
newUserScenario.user = userScenario.user
newUserScenarioList.add(newUserScenario)
}
userScenarioRepository.saveAll(newUserScenarioList)
db.scenario.saveAll(newUserScenarioList)
}
// UserTradeItemList
val userTradeItemList = upsertUserAll.userTradeItemList
val userTradeItemList = all.userTradeItemList
val newUserTradeItemList: MutableList<UserTradeItem> = ArrayList()
if (userTradeItemList != null) {
@ -493,7 +475,7 @@ class UpsertUserAllHandler @Autowired constructor(
val tradeItemId = newUserTradeItem.tradeItemId
val tradeItemOptional =
userTradeItemRepository.findByUserAndChapterIdAndTradeItemId(u, chapterId, tradeItemId)
db.tradeItem.findByUserAndChapterIdAndTradeItemId(u, chapterId, tradeItemId)
val userTradeItem = tradeItemOptional.orElseGet { UserTradeItem().apply { user = u } }
newUserTradeItem.id = userTradeItem.id
@ -501,10 +483,10 @@ class UpsertUserAllHandler @Autowired constructor(
newUserTradeItemList.add(newUserTradeItem)
}
}
userTradeItemRepository.saveAll(newUserTradeItemList)
db.tradeItem.saveAll(newUserTradeItemList)
// UserEventMusicList
val userEventMusicList = upsertUserAll.userEventMusicList
val userEventMusicList = all.userEventMusicList
val newUserEventMusicList: MutableList<UserEventMusic> = ArrayList()
if (userEventMusicList != null) {
@ -514,7 +496,7 @@ class UpsertUserAllHandler @Autowired constructor(
val musicId = newUserEventMusic.musicId
val eventMusicOptional =
userEventMusicRepository.findByUserAndEventIdAndTypeAndMusicId(u, eventId, type, musicId)
db.eventMusic.findByUserAndEventIdAndTypeAndMusicId(u, eventId, type, musicId)
val userEventMusic = eventMusicOptional.orElseGet { UserEventMusic().apply { user = u } }
newUserEventMusic.id = userEventMusic.id
@ -522,17 +504,17 @@ class UpsertUserAllHandler @Autowired constructor(
newUserEventMusicList.add(newUserEventMusic)
}
}
userEventMusicRepository.saveAll(newUserEventMusicList)
db.eventMusic.saveAll(newUserEventMusicList)
// UserTechEventList
val userTechEventList = upsertUserAll.userTechEventList
val userTechEventList = all.userTechEventList
val newUserTechEventList: MutableList<UserTechEvent> = ArrayList()
if (userTechEventList != null) {
for (newUserTechEvent in userTechEventList) {
val eventId = newUserTechEvent.eventId
val techEventOptional = userTechEventRepository.findByUserAndEventId(u, eventId)
val techEventOptional = db.techEvent.findByUserAndEventId(u, eventId)
val userTechEvent = techEventOptional.orElseGet { UserTechEvent().apply { user = u } }
newUserTechEvent.id = userTechEvent.id
@ -540,10 +522,10 @@ class UpsertUserAllHandler @Autowired constructor(
newUserTechEventList.add(newUserTechEvent)
}
}
userTechEventRepository.saveAll(newUserTechEventList)
db.techEvent.saveAll(newUserTechEventList)
// UserKopList
val userKopList = upsertUserAll.userKopList
val userKopList = all.userKopList
val newUserKopList: MutableList<UserKop> = ArrayList()
if (userKopList != null) {
@ -551,7 +533,7 @@ class UpsertUserAllHandler @Autowired constructor(
val kopId = newUserKop.kopId
val areaId = newUserKop.areaId
val kopOptional = userKopRepository.findByUserAndKopIdAndAreaId(u, kopId, areaId)
val kopOptional = db.kop.findByUserAndKopIdAndAreaId(u, kopId, areaId)
val userKop = kopOptional.orElseGet { UserKop().apply { user = u } }
newUserKop.id = userKop.id
@ -559,32 +541,60 @@ class UpsertUserAllHandler @Autowired constructor(
newUserKopList.add(newUserKop)
}
}
userKopRepository.saveAll(newUserKopList)
db.kop.saveAll(newUserKopList)
// UserEventMap
val newUserEventMap = all.userEventMap
if (newUserEventMap != null) {
val userEventOptional = db.eventMap.findSingleByUser(u)
val userEventMap: UserEventMap = userEventOptional.orElseGet { UserEventMap().apply { user = u } }
newUserEventMap.id = userEventMap.id
newUserEventMap.user = u
db.eventMap.save(newUserEventMap)
}
val json = mapper.write(CodeResp(1, "upsertUserAll"))
logger.info("Response: $json")
return json
}
private fun saveGeneralData(itemList: List<UserRecentRating>, newUserData: UserData, key: String) {
private fun saveRecentRatingData(itemList: List<UserRecentRating>, newUserData: UserData, key: String) {
val sb = StringBuilder()
// Convert to a string
for (item in itemList) {
sb.append(item.musicId).append(":").append(item.difficultId).append(":").append(item.score)
sb.append(",")
}
if (sb.length > 0) {
sb.deleteCharAt(sb.length - 1)
if (sb.isNotEmpty()) { sb.deleteCharAt(sb.length - 1) }
saveGeneralData(newUserData, key, sb.toString())
}
private fun saveFumenScoreData(itemList: List<OngekiFumenScore>, newUserData: UserData, key: String) {
val sb = StringBuilder()
for (item in itemList) {
sb.append(item.musicId).append(":")
.append(item.difficultId).append(":")
.append(item.score).append(":")
.append(item.platinumScoreStar).append(":")
.append(item.platinumScoreMax)
sb.append(",")
}
val uOptional = userGeneralDataRepository.findByUserAndPropertyKey(newUserData, key)
if (sb.isNotEmpty()) { sb.deleteCharAt(sb.length - 1) }
saveGeneralData(newUserData, key, sb.toString())
}
private fun saveGeneralData(newUserData: UserData, key: String, data: String) {
val uOptional = db.generalData.findByUserAndPropertyKey(newUserData, key)
val userGeneralData = uOptional.orElseGet {
UserGeneralData().apply {
user = newUserData
propertyKey = key
}
}
userGeneralData.propertyValue = sb.toString()
userGeneralDataRepository.save(userGeneralData)
userGeneralData.propertyValue = data
db.generalData.save(userGeneralData)
}
companion object {

View File

@ -7,6 +7,15 @@ class CodeResp(
var apiName: String? = null,
)
class OngekiFumenScore(
var musicId: Int = 0,
var difficultId: Int = 0,
var romVersionCode: String? = null,
var score: Int = 0,
var platinumScoreMax: Int = 0,
var platinumScoreStar: Int = 0,
)
class GetUserPreviewResp(
var userId: Long = 0,
var isLogin: Bool = false,
@ -16,6 +25,7 @@ class GetUserPreviewResp(
var level: Int = 0,
var exp: Long = 0,
var playerRating: Long = 0,
var newPlayerRating: Long = 0,
var lastGameId: String = "",
var lastRomVersion: String = "",
var lastDataVersion: String = "",

View File

@ -93,6 +93,17 @@ class UserData : IUserData {
var lastPlayMusicLevel = 0
var lastEmoneyBrand = 0
// Re:Fresh
var shizukuCount = 0
var newPlayerRating = 0
var newHighestRating = 0
var sumPlatinumScoreStar = 0
var sumBasicPlatinumScoreStar = 0
var sumAdvancedPlatinumScoreStar = 0
var sumExpertPlatinumScoreStar = 0
var sumMasterPlatinumScoreStar = 0
var sumLunaticPlatinumScoreStar = 0
override val totalScore get() = sumTechHighScore
}
@ -254,6 +265,9 @@ class UserMemoryChapter : OngekiUserEntity() {
var isClear = false
var gaugeId = 0
var gaugeNum = 0
// Re:Fresh
var isEndingWatched = false
}
@Entity(name = "OngekiUserMissionPoint")
@ -283,6 +297,9 @@ class UserMusicDetail : OngekiUserEntity(), IGenericUserMusic {
var isLock = false
var clearStatus = 0
var isStoryWatched = false
// Re:Fresh
var platinumScoreStar = 0
}
@Entity(name = "OngekiUserMusicItem")
@ -332,6 +349,9 @@ class UserOption : OngekiUserEntity() {
var dispRating = 0
var dispBP = 0
var headphone = 0
// Re:Fresh
var effectAttack = 0
}
@ -471,3 +491,28 @@ class UserTrainingRoom : OngekiUserEntity() {
var cardId: Int = 0
var valueDate: String = ""
}
// Re:Fresh
@Entity(name = "OngekiUserEventMap")
@Table(name = "ongeki_user_event_map")
class UserEventMap : OngekiUserEntity() {
var eventId = 0
var mapId = 0
var mapData: String? = null
var totalPoint = 0
var totalUsePoint = 0
}
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "OngekiUserSkin")
@Table(name = "ongeki_user_skin")
class UserSkin : OngekiUserEntity() {
// TODO: should be updated on net when changing skin
var isValid = false
var deckId = 0
var cardId1 = 0
var cardId2 = 0
var cardId3 = 0
}

View File

@ -8,6 +8,7 @@ class UpsertUserAll {
var userJewelboostlogList: List<Map<String, Any>>? = null
var userSessionlogList: List<Map<String, Any>>? = null
var userActivityList: List<UserActivity>? = null
var userRecentRatingList: List<UserRecentRating>? = null
var userBpBaseList: List<UserRecentRating>? = null
var userRatingBaseBestNewList: List<UserRecentRating>? = null
@ -16,6 +17,7 @@ class UpsertUserAll {
var userRatingBaseNextNewList: List<UserRecentRating>? = null
var userRatingBaseNextList: List<UserRecentRating>? = null
var userRatingBaseHotNextList: List<UserRecentRating>? = null
var userMusicDetailList: List<UserMusicDetail>? = null
var userCharacterList: List<UserCharacter>? = null
var userCardList: List<UserCard>? = null
@ -59,4 +61,13 @@ class UpsertUserAll {
var isNewEventMusicList: String? = null
var isNewTechEventList: String? = null
var isNewKopList: String? = null
// Re:Fresh
var userNewRatingBasePScoreList: List<OngekiFumenScore>? = null
var userNewRatingBaseBestList: List<OngekiFumenScore>? = null
var userNewRatingBaseBestNewList: List<OngekiFumenScore>? = null
var userNewRatingBaseNextPScoreList: List<OngekiFumenScore>? = null
var userNewRatingBaseNextBestList: List<OngekiFumenScore>? = null
var userNewRatingBaseNextBestNewList: List<OngekiFumenScore>? = null
var userEventMap: UserEventMap? = null
}

View File

@ -1,17 +0,0 @@
package icu.samnyan.aqua.sega.ongeki.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OngekiFumenScore {
private int musicId;
private int difficultId;
private String romVersionCode;
private int score;
public int platinumScoreMax;
public int platinumScoreStar;
}

View File

@ -1,42 +0,0 @@
package icu.samnyan.aqua.sega.ongeki.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GetUserPreviewResp {
private long userId = 0;
@JsonProperty("isLogin")
private boolean isLogin = false;
private String lastLoginDate = null;
private String userName = "";
private int reincarnationNum = 0;
private int level = 0;
private long exp = 0;
private long playerRating = 0;
private long newPlayerRating = 0;
private String lastGameId = "";
private String lastRomVersion = "";
private String lastDataVersion = "";
private String lastPlayDate = null;
private int nameplateId = 0;
private int trophyId = 0;
private int cardId = 0;
private int dispPlayerLv = 0;
private int dispRating = 0;
private int dispBP = 0;
private int headphone = 0;
private int banStatus = 0;
@JsonProperty("isWarningConfirmed")
private boolean isWarningConfirmed = false;
private int lastEmoneyBrand = 0;
private int lastEmoneyCredit = 0;
}

View File

@ -1,183 +0,0 @@
package icu.samnyan.aqua.sega.ongeki.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import icu.samnyan.aqua.net.games.IUserData;
import icu.samnyan.aqua.sega.general.model.Card;
import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "OngekiUserData")
@Table(name = "ongeki_user_data")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserData implements Serializable, IUserData {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonSerialize(using = AccessCodeSerializer.class)
@JsonProperty(value = "accessCode", access = JsonProperty.Access.READ_ONLY)
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "aime_card_id", unique = true)
private Card card;
private String userName;
private int level;
private int reincarnationNum;
private long exp;
private long point;
private long totalPoint;
private int playCount;
private int jewelCount;
private int totalJewelCount;
private int medalCount;
private int shizukuCount;
private int playerRating;
private int highestRating;
private int newPlayerRating;
private int newHighestRating;
private int battlePoint;
private int bestBattlePoint;
private int overDamageBattlePoint;
@JsonProperty("isDialogWatchedSuggestMemory")
private boolean isDialogWatchedSuggestMemory;
private int nameplateId;
private int trophyId;
private int cardId;
private int characterId;
private int characterVoiceNo;
private int tabSetting;
private int tabSortSetting;
private int cardCategorySetting;
private int cardSortSetting;
private int rivalScoreCategorySetting;
private int playedTutorialBit;
private int firstTutorialCancelNum;
private long sumTechHighScore;
private long sumTechBasicHighScore;
private long sumTechAdvancedHighScore;
private long sumTechExpertHighScore;
private long sumTechMasterHighScore;
private long sumTechLunaticHighScore;
private long sumBattleHighScore;
private long sumBattleBasicHighScore;
private long sumBattleAdvancedHighScore;
private long sumBattleExpertHighScore;
private long sumBattleMasterHighScore;
private long sumBattleLunaticHighScore;
private int sumPlatinumScoreStar;
private int sumBasicPlatinumScoreStar;
private int sumAdvancedPlatinumScoreStar;
private int sumExpertPlatinumScoreStar;
private int sumMasterPlatinumScoreStar;
private int sumLunaticPlatinumScoreStar;
private String eventWatchedDate;
private String cmEventWatchedDate;
private String firstGameId;
private String firstRomVersion;
private String firstDataVersion;
private String firstPlayDate;
private String lastGameId;
private String lastRomVersion;
private String lastDataVersion;
private String compatibleCmVersion;
private String lastPlayDate;
private int lastPlaceId;
private String lastPlaceName;
private int lastRegionId;
private String lastRegionName;
private int lastAllNetId;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String lastClientId;
private int lastUsedDeckId;
private int lastPlayMusicLevel;
private int lastEmoneyBrand;
@Override
public long getTotalScore() {
return sumTechHighScore;
}
}

View File

@ -1,47 +0,0 @@
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;
}
}

View File

@ -1,66 +0,0 @@
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 jakarta.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("isEndingWatched")
private boolean isEndingWatched;
@JsonProperty("isClear")
private boolean isClear;
private int gaugeId;
private int gaugeNum;
public UserMemoryChapter(UserData userData) {
this.user = userData;
}
}

View File

@ -1,78 +0,0 @@
package icu.samnyan.aqua.sega.ongeki.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import icu.samnyan.aqua.net.games.IGenericUserMusic;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "OngekiUserMusicDetail")
@Table(name = "ongeki_user_music_detail")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserMusicDetail implements Serializable, IGenericUserMusic {
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 level;
private int playCount;
private int techScoreMax;
private int techScoreRank;
private int battleScoreMax;
private int battleScoreRank;
private int platinumScoreMax;
private int platinumScoreStar;
private int maxComboCount;
private int maxOverKill;
private int maxTeamOverKill;
@JsonProperty("isFullBell")
private boolean isFullBell;
@JsonProperty("isFullCombo")
private boolean isFullCombo;
@JsonProperty("isAllBreake")
private boolean isAllBreake;
@JsonProperty("isLock")
private boolean isLock;
private int clearStatus;
private boolean isStoryWatched;
public UserMusicDetail(UserData userData) {
this.user = userData;
}
}

View File

@ -1,112 +0,0 @@
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 = "OngekiUserOption")
@Table(name = "ongeki_user_option")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserOption 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 optionSet;
private int speed;
private int mirror;
private int judgeTiming;
private int judgeAdjustment;
private int abort;
private int stealthField;
private int tapSound;
private int volGuide;
private int volAll;
private int volTap;
private int volCrTap;
private int volHold;
private int volSide;
private int volFlick;
private int volBell;
private int volEnemy;
private int volSkill;
private int volDamage;
private int colorField;
private int colorLaneBright;
private int colorWallBright;
private int colorLane;
private int colorSide;
private int effectDamage;
private int effectPos;
private int effectAttack;
private int judgeDisp;
private int judgePos;
private int judgeBreak;
private int judgeHit;
private int platinumBreakDisp;
private int judgeCriticalBreak;
private int matching;
private int dispPlayerLv;
private int dispRating;
private int dispBP;
private int headphone;
public UserOption(UserData userData) {
this.user = userData;
}
}

View File

@ -1,47 +0,0 @@
package icu.samnyan.aqua.sega.ongeki.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "OngekiUserSkin")
@Table(name = "ongeki_user_skin")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserSkin 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;
//TODO: should be updated on net when changing skin
private boolean isValid;
private int deckId;
private int cardId1;
private int cardId2;
private int cardId3;
public UserSkin(UserData userData) {
this.user = userData;
}
}