mirror of
https://github.com/MewoLab/AquaDX.git
synced 2026-02-13 03:07:30 +08:00
[maimai2] Implement proper player rate saving
This commit is contained in:
@@ -1,22 +0,0 @@
|
|||||||
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.UserRate;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
|
||||||
*/
|
|
||||||
@Repository("Maimai2UserRateRepository")
|
|
||||||
public interface UserRateRepository extends JpaRepository<UserRate, Long> {
|
|
||||||
|
|
||||||
Optional<UserRate> findByUserAndMusicIdAndLevel(UserDetail user, int musicId, int level);
|
|
||||||
|
|
||||||
List<UserRate> findByUser_Card_ExtId(long userId);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -3,23 +3,21 @@ package icu.samnyan.aqua.sega.maimai2.handler.impl;
|
|||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|
||||||
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository;
|
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository;
|
||||||
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserRateRepository;
|
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserGeneralDataRepository;
|
||||||
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserUdemaeRepository;
|
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserUdemaeRepository;
|
||||||
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
|
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
|
||||||
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRating;
|
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserRating;
|
||||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail;
|
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail;
|
||||||
|
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserGeneralData;
|
||||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserRate;
|
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserRate;
|
||||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserUdemae;
|
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserUdemae;
|
||||||
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
|
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
* @author samnyan (privateamusement@protonmail.com)
|
||||||
@@ -30,15 +28,14 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||||||
private static final Logger logger = LoggerFactory.getLogger(GetUserRatingHandler.class);
|
private static final Logger logger = LoggerFactory.getLogger(GetUserRatingHandler.class);
|
||||||
|
|
||||||
private final BasicMapper mapper;
|
private final BasicMapper mapper;
|
||||||
|
private final UserGeneralDataRepository userGeneralDataRepository;
|
||||||
private final UserRateRepository userRateRepository;
|
|
||||||
private final UserUdemaeRepository userUdemaeRepository;
|
private final UserUdemaeRepository userUdemaeRepository;
|
||||||
private final UserDataRepository userDataRepository;
|
private final UserDataRepository userDataRepository;
|
||||||
|
|
||||||
public GetUserRatingHandler(BasicMapper mapper, UserRateRepository userRateRepository, UserUdemaeRepository userUdemaeRepository,
|
public GetUserRatingHandler(BasicMapper mapper, UserUdemaeRepository userUdemaeRepository, UserGeneralDataRepository userGeneralDataRepository,
|
||||||
UserDataRepository userDataRepository) {
|
UserDataRepository userDataRepository) {
|
||||||
this.mapper = mapper;
|
this.mapper = mapper;
|
||||||
this.userRateRepository = userRateRepository;
|
this.userGeneralDataRepository = userGeneralDataRepository;
|
||||||
this.userUdemaeRepository = userUdemaeRepository;
|
this.userUdemaeRepository = userUdemaeRepository;
|
||||||
this.userDataRepository = userDataRepository;
|
this.userDataRepository = userDataRepository;
|
||||||
}
|
}
|
||||||
@@ -47,7 +44,10 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||||||
public String handle(Map<String, Object> request) throws JsonProcessingException {
|
public String handle(Map<String, Object> request) throws JsonProcessingException {
|
||||||
long userId = ((Number) request.get("userId")).longValue();
|
long userId = ((Number) request.get("userId")).longValue();
|
||||||
|
|
||||||
List<UserRate> userRate = userRateRepository.findByUser_Card_ExtId(userId);
|
Optional<UserGeneralData> recentOptional = userGeneralDataRepository.findByUser_Card_ExtIdAndPropertyKey(userId, "recent_rating");
|
||||||
|
Optional<UserGeneralData> recentNewOptional = userGeneralDataRepository.findByUser_Card_ExtIdAndPropertyKey(userId, "recent_rating_new");
|
||||||
|
Optional<UserGeneralData> recentNextOptional = userGeneralDataRepository.findByUser_Card_ExtIdAndPropertyKey(userId, "recent_rating_next");
|
||||||
|
Optional<UserGeneralData> recentNextNewOptional = userGeneralDataRepository.findByUser_Card_ExtIdAndPropertyKey(userId, "recent_rating_next_new");
|
||||||
List<UserRate> emptyRating = new ArrayList<>();
|
List<UserRate> emptyRating = new ArrayList<>();
|
||||||
|
|
||||||
UserRating userRating = new UserRating();
|
UserRating userRating = new UserRating();
|
||||||
@@ -58,17 +58,36 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||||||
userRating.setRating(user.getPlayerRating());
|
userRating.setRating(user.getPlayerRating());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Fix these, rating is incorrect
|
|
||||||
|
|
||||||
// Old charts (standard) = 25
|
// Old charts (standard) = 25
|
||||||
userRating.setRatingList(userRate);
|
if (recentOptional.isPresent()) {
|
||||||
|
String val = recentOptional.get().getPropertyValue();
|
||||||
|
userRating.setRatingList(loadRateData(val));
|
||||||
|
} else {
|
||||||
|
userRating.setRatingList(emptyRating);
|
||||||
|
}
|
||||||
|
|
||||||
// New charts (DX) = 15
|
// New charts (DX) = 15
|
||||||
userRating.setNewRatingList(emptyRating);
|
if (recentNewOptional.isPresent()) {
|
||||||
|
String val = recentNewOptional.get().getPropertyValue();
|
||||||
|
userRating.setNewRatingList(loadRateData(val));
|
||||||
|
} else {
|
||||||
|
userRating.setNewRatingList(emptyRating);
|
||||||
|
}
|
||||||
|
|
||||||
// ??
|
// ??
|
||||||
userRating.setNextRatingList(emptyRating);
|
if (recentNextOptional.isPresent()) {
|
||||||
userRating.setNextNewRatingList(emptyRating);
|
String val = recentNextOptional.get().getPropertyValue();
|
||||||
|
userRating.setNextRatingList(loadRateData(val));
|
||||||
|
} else {
|
||||||
|
userRating.setNextRatingList(emptyRating);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recentNextNewOptional.isPresent()) {
|
||||||
|
String val = recentNextNewOptional.get().getPropertyValue();
|
||||||
|
userRating.setNextNewRatingList(loadRateData(val));
|
||||||
|
} else {
|
||||||
|
userRating.setNextNewRatingList(emptyRating);
|
||||||
|
}
|
||||||
|
|
||||||
Optional<UserUdemae> optionalUserUdemae = userUdemaeRepository.findByUser_Card_ExtId(userId);
|
Optional<UserUdemae> optionalUserUdemae = userUdemaeRepository.findByUser_Card_ExtId(userId);
|
||||||
if (optionalUserUdemae.isPresent()) {
|
if (optionalUserUdemae.isPresent()) {
|
||||||
@@ -86,4 +105,25 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||||||
logger.info("Response: " + json);
|
logger.info("Response: " + json);
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<UserRate> loadRateData(String val) {
|
||||||
|
List<UserRate> rateList = new LinkedList<>();
|
||||||
|
|
||||||
|
if(StringUtils.isNotBlank(val) && val.contains(",")) {
|
||||||
|
String[] records = val.split(",");
|
||||||
|
for (String record :
|
||||||
|
records) {
|
||||||
|
String[] value = record.split(":");
|
||||||
|
rateList.add(new UserRate(
|
||||||
|
Integer.parseInt(value[0]),
|
||||||
|
Integer.parseInt(value[1]),
|
||||||
|
Integer.parseInt(value[2]),
|
||||||
|
Integer.parseInt(value[3])
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rateList;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,10 +43,10 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||||||
private final UserMapRepository userMapRepository;
|
private final UserMapRepository userMapRepository;
|
||||||
private final UserLoginBonusRepository userLoginBonusRepository;
|
private final UserLoginBonusRepository userLoginBonusRepository;
|
||||||
private final UserFavoriteRepository userFavoriteRepository;
|
private final UserFavoriteRepository userFavoriteRepository;
|
||||||
private final UserRateRepository userRateRepository;
|
|
||||||
private final UserUdemaeRepository userUdemaeRepository;
|
private final UserUdemaeRepository userUdemaeRepository;
|
||||||
|
private final UserGeneralDataRepository userGeneralDataRepository;
|
||||||
|
|
||||||
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, UserRateRepository userRateRepository, UserUdemaeRepository userUdemaeRepository) {
|
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) {
|
||||||
this.mapper = mapper;
|
this.mapper = mapper;
|
||||||
this.cardService = cardService;
|
this.cardService = cardService;
|
||||||
this.userDataRepository = userDataRepository;
|
this.userDataRepository = userDataRepository;
|
||||||
@@ -59,8 +59,8 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||||||
this.userMapRepository = userMapRepository;
|
this.userMapRepository = userMapRepository;
|
||||||
this.userLoginBonusRepository = userLoginBonusRepository;
|
this.userLoginBonusRepository = userLoginBonusRepository;
|
||||||
this.userFavoriteRepository = userFavoriteRepository;
|
this.userFavoriteRepository = userFavoriteRepository;
|
||||||
this.userRateRepository = userRateRepository;
|
|
||||||
this.userUdemaeRepository = userUdemaeRepository;
|
this.userUdemaeRepository = userUdemaeRepository;
|
||||||
|
this.userGeneralDataRepository = userGeneralDataRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -198,23 +198,15 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||||||
|
|
||||||
userUdemaeRepository.saveAndFlush(newUserUdemae);
|
userUdemaeRepository.saveAndFlush(newUserUdemae);
|
||||||
|
|
||||||
List<UserRate> userRateList = userRating.getRatingList();
|
/* UserRate:
|
||||||
List<UserRate> newUserRateList = new ArrayList<>();
|
Let's save recent user rating as same as ongeki implementation.
|
||||||
|
Previously saved rating will not compatible with this and will be lost, sorry.
|
||||||
|
*/
|
||||||
|
|
||||||
// UserRate
|
this.saveGeneralData(userRating.getRatingList(), newUserData, "recent_rating");
|
||||||
for (UserRate newUserRate : userRateList) {
|
this.saveGeneralData(userRating.getNewRatingList(), newUserData, "recent_rating_new");
|
||||||
int musicId = newUserRate.getMusicId();
|
this.saveGeneralData(userRating.getNextRatingList(), newUserData, "recent_rating_next");
|
||||||
int musicLevel = newUserRate.getLevel();
|
this.saveGeneralData(userRating.getNextNewRatingList(), newUserData, "recent_rating_next_new");
|
||||||
|
|
||||||
Optional<UserRate> rateOptional = userRateRepository.findByUserAndMusicIdAndLevel(newUserData, musicId, musicLevel);
|
|
||||||
UserRate userRate = rateOptional.orElseGet(() -> new UserRate(newUserData));
|
|
||||||
|
|
||||||
newUserRate.setId(userRate.getId());
|
|
||||||
newUserRate.setUser(newUserData);
|
|
||||||
newUserRateList.add(newUserRate);
|
|
||||||
|
|
||||||
}
|
|
||||||
userRateRepository.saveAll(newUserRateList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserItemList
|
// UserItemList
|
||||||
@@ -303,4 +295,21 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||||||
|
|
||||||
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertUserAllApi\"}";
|
return "{\"returnCode\":1,\"apiName\":\"com.sega.maimai2servlet.api.UpsertUserAllApi\"}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveGeneralData(List<UserRate> itemList, UserDetail newUserData, String key) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
// Convert to a string
|
||||||
|
for (UserRate item :
|
||||||
|
itemList) {
|
||||||
|
sb.append(item.getMusicId()).append(":").append(item.getLevel()).append(":").append(item.getRomVersion()).append(":").append(item.getAchievement());
|
||||||
|
sb.append(",");
|
||||||
|
}
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
sb.deleteCharAt(sb.length() - 1);
|
||||||
|
}
|
||||||
|
Optional<UserGeneralData> uOptional = userGeneralDataRepository.findByUserAndPropertyKey(newUserData, key);
|
||||||
|
UserGeneralData userGeneralData = uOptional.orElseGet(() -> new UserGeneralData(newUserData, key));
|
||||||
|
userGeneralData.setPropertyValue(sb.toString());
|
||||||
|
userGeneralDataRepository.save(userGeneralData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,38 +4,15 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import javax.persistence.*;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
* @author samnyan (privateamusement@protonmail.com)
|
||||||
*/
|
*/
|
||||||
@Entity(name = "Maimai2UserRate")
|
|
||||||
@Table(name = "maimai2_user_rate")
|
|
||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class UserRate implements Serializable {
|
public class UserRate {
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@JsonIgnore
|
|
||||||
private long id;
|
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "user_id")
|
|
||||||
private UserDetail user;
|
|
||||||
|
|
||||||
private int musicId;
|
private int musicId;
|
||||||
private int level;
|
private int level;
|
||||||
private int romVersion;
|
private int romVersion;
|
||||||
private int achievement;
|
private int achievement;
|
||||||
|
|
||||||
public UserRate(UserDetail user) {
|
|
||||||
this.user = user;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE maimai2_user_rate RENAME TO bak_maimai2_user_rate;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE maimai2_user_rate RENAME TO bak_maimai2_user_rate;
|
||||||
Reference in New Issue
Block a user