[maimai2] Add Universe support

This commit is contained in:
Dom Eori
2022-02-14 22:15:54 +09:00
parent 3f0059c0f4
commit 803017bab6
13 changed files with 1052 additions and 2 deletions

View File

@@ -45,6 +45,8 @@ public class Maimai2ServletController {
private final GetUserCourseHandler getUserCourseHandler;
private final UploadUserPhotoHandler uploadUserPhotoHandler;
private final UploadUserPlaylogHandler uploadUserPlaylogHandler;
private final GetGameNgMusicIdHandler getGameNgMusicIdHandler;
private final GetUserFriendSeasonRankingHandler getUserFriendSeasonRankingHandler;
public Maimai2ServletController(GetGameSettingHandler getGameSettingHandler, GetGameEventHandler getGameEventHandler, GetGameRankingHandler getGameRankingHandler, GetGameTournamentInfoHandler getGameTournamentInfoHandler,
GetTransferFriendHandler getTransferFriendHandler, GetUserActivityHandler getUserActivityHandler, UserLoginHandler userLoginHandler, UserLogoutHandler userLogoutHandler,
@@ -53,7 +55,7 @@ public class Maimai2ServletController {
GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMapHandler getUserMapHandler, GetUserFavoriteHandler getUserFavoriteHandler,
GetUserCardHandler getUserCardHandler, GetUserMusicHandler getUserMusicHandler, GetUserRatingHandler getUserRatingHandler, GetUserRegionHandler getUserRegionHandler,
GetGameChargeHandler getGameChargeHandler, GetUserChargeHandler getUserChargeHandler, GetUserCourseHandler getUserCourseHandler, UploadUserPhotoHandler uploadUserPhotoHandler,
UploadUserPlaylogHandler uploadUserPlaylogHandler) {
UploadUserPlaylogHandler uploadUserPlaylogHandler, GetGameNgMusicIdHandler getGameNgMusicIdHandler, GetUserFriendSeasonRankingHandler getUserFriendSeasonRankingHandler) {
this.getGameSettingHandler = getGameSettingHandler;
this.getGameEventHandler = getGameEventHandler;
this.getGameRankingHandler = getGameRankingHandler;
@@ -82,6 +84,8 @@ public class Maimai2ServletController {
this.getUserCourseHandler = getUserCourseHandler;
this.uploadUserPhotoHandler = uploadUserPhotoHandler;
this.uploadUserPlaylogHandler = uploadUserPlaylogHandler;
this.getGameNgMusicIdHandler = getGameNgMusicIdHandler;
this.getUserFriendSeasonRankingHandler = getUserFriendSeasonRankingHandler;
}
// Mandatory for boot
@@ -274,4 +278,15 @@ public class Maimai2ServletController {
return getUserCourseHandler.handle(request);
}
// Universe APIs
@PostMapping("GetGameNgMusicIdApi")
public String getGameNgMusicIdHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameNgMusicIdHandler.handle(request);
}
@PostMapping("GetUserFriendSeasonRankingApi")
public String getUserFriendSeasonRankingHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserFriendSeasonRankingHandler.handle(request);
}
}

View File

@@ -0,0 +1,22 @@
package icu.samnyan.aqua.sega.maimai2.dao.userdata;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserFriendSeasonRanking;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("Maimai2UserFriendSeasonRankingRepository")
public interface UserFriendSeasonRankingRepository extends JpaRepository<UserFriendSeasonRanking, Long> {
Optional<UserFriendSeasonRanking> findByUserAndSeasonId(UserDetail user, int seasonId);
Page<UserFriendSeasonRanking> findByUser_Card_ExtId(long userId, Pageable page);
}

View File

@@ -0,0 +1,42 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("Maimai2GetGameNgMusicHandler")
public class GetGameNgMusicIdHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameNgMusicIdHandler.class);
private final StringMapper mapper;
public GetGameNgMusicIdHandler(StringMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
List<Object> musicIdList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", 0);
resultMap.put("musicIdList", musicIdList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,57 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserFriendSeasonRankingRepository;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserFriendSeasonRanking;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("Maimai2GetUserFriendSeasonRankingHandler")
public class GetUserFriendSeasonRankingHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserFriendSeasonRankingHandler.class);
private final BasicMapper mapper;
private final UserFriendSeasonRankingRepository userFriendSeasonRankingRepository;
public GetUserFriendSeasonRankingHandler(BasicMapper mapper, UserFriendSeasonRankingRepository userFriendSeasonRankingRepository) {
this.mapper = mapper;
this.userFriendSeasonRankingRepository = userFriendSeasonRankingRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
int nextIndexVal = ((Number) request.get("nextIndex")).intValue();
int maxCount = 20;
int pageNum = nextIndexVal / maxCount;
Page<UserFriendSeasonRanking> dbPage = userFriendSeasonRankingRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount));
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex);
resultMap.put("userFriendSeasonRankingList", dbPage.getContent());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -46,8 +46,9 @@ public class UpsertUserAllHandler implements BaseHandler {
private final UserUdemaeRepository userUdemaeRepository;
private final UserGeneralDataRepository userGeneralDataRepository;
private final UserCourseRepository userCourseRepository;
private final UserFriendSeasonRankingRepository userFriendSeasonRankingRepository;
public UpsertUserAllHandler(BasicMapper mapper, CardService cardService, UserDataRepository userDataRepository, UserExtendRepository userExtendRepository, UserOptionRepository userOptionRepository, UserItemRepository userItemRepository, UserMusicDetailRepository userMusicDetailRepository, UserActRepository userActRepository, UserCharacterRepository userCharacterRepository, UserMapRepository userMapRepository, UserLoginBonusRepository userLoginBonusRepository, UserFavoriteRepository userFavoriteRepository, UserUdemaeRepository userUdemaeRepository, UserGeneralDataRepository userGeneralDataRepository, UserCourseRepository userCourseRepository) {
public UpsertUserAllHandler(BasicMapper mapper, CardService cardService, UserDataRepository userDataRepository, UserExtendRepository userExtendRepository, UserOptionRepository userOptionRepository, UserItemRepository userItemRepository, UserMusicDetailRepository userMusicDetailRepository, UserActRepository userActRepository, UserCharacterRepository userCharacterRepository, UserMapRepository userMapRepository, UserLoginBonusRepository userLoginBonusRepository, UserFavoriteRepository userFavoriteRepository, UserUdemaeRepository userUdemaeRepository, UserGeneralDataRepository userGeneralDataRepository, UserCourseRepository userCourseRepository, UserFriendSeasonRankingRepository userFriendSeasonRankingRepository) {
this.mapper = mapper;
this.cardService = cardService;
this.userDataRepository = userDataRepository;
@@ -63,6 +64,7 @@ public class UpsertUserAllHandler implements BaseHandler {
this.userUdemaeRepository = userUdemaeRepository;
this.userGeneralDataRepository = userGeneralDataRepository;
this.userCourseRepository = userCourseRepository;
this.userFriendSeasonRankingRepository = userFriendSeasonRankingRepository;
}
@Override
@@ -268,6 +270,24 @@ public class UpsertUserAllHandler implements BaseHandler {
userCourseRepository.saveAll(newUserCourseList);
}
// UserFriendSeasonRankingList
if (userAll.getUserFriendSeasonRankingList() != null) {
List<UserFriendSeasonRanking> userFriendSeasonRankingList = userAll.getUserFriendSeasonRankingList();
List<UserFriendSeasonRanking> newUserFriendSeasonRankingList = new ArrayList<>();
for (UserFriendSeasonRanking newUserFriendSeasonRanking : userFriendSeasonRankingList) {
int seasonId = newUserFriendSeasonRanking.getSeasonId();
Optional<UserFriendSeasonRanking> userFriendSeasonRankingOptional = userFriendSeasonRankingRepository.findByUserAndSeasonId(newUserData, seasonId);
UserFriendSeasonRanking userFriendSeasonRanking = userFriendSeasonRankingOptional.orElseGet(() -> new UserFriendSeasonRanking(newUserData));
newUserFriendSeasonRanking.setId(userFriendSeasonRanking.getId());
newUserFriendSeasonRanking.setUser(newUserData);
newUserFriendSeasonRankingList.add(newUserFriendSeasonRanking);
}
userFriendSeasonRankingRepository.saveAll(newUserFriendSeasonRankingList);
}
// UserFavoriteList
if (userAll.getUserFavoriteList() != null) {
List<UserFavorite> userFavoriteList = userAll.getUserFavoriteList();

View File

@@ -29,6 +29,7 @@ public class UserAll implements Serializable {
private List<UserItem> userItemList;
private List<UserMusicDetail> userMusicDetailList;
private List<UserCourse> userCourseList;
private List<UserFriendSeasonRanking> userFriendSeasonRankingList;
private List<UserCharge> userChargeList;
private List<UserFavorite> userFavoriteList;
private List<UserActivity> userActivityList;
@@ -40,4 +41,5 @@ public class UserAll implements Serializable {
private String isNewMusicDetailList;
private String isNewCourseList;
private String isNewFavoriteList;
private String isNewFriendSeasonRankingList;
}

View File

@@ -112,5 +112,7 @@ public class UserDetail implements Serializable {
private long totalExpertAchievement;
private long totalMasterAchievement;
private long totalReMasterAchievement;
private long playerOldRating;
private long playerNewRating;
private long dateTime;
}

View File

@@ -0,0 +1,42 @@
package icu.samnyan.aqua.sega.maimai2.model.userdata;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "Maimai2UserFriendSeasonRanking")
@Table(name = "maimai2_user_friend_season_ranking")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserFriendSeasonRanking implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserDetail user;
private int seasonId;
private int point;
private int rank;
private boolean rewardGet;
private String userName;
private String recordDate;
public UserFriendSeasonRanking(UserDetail user) {
this.user = user;
}
}