mirror of https://github.com/hykilpikonna/AquaDX
[maimai2] Implement proper player rate saving
parent
974a0d3fe2
commit
550f4c4228
|
@ -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 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.handler.BaseHandler;
|
||||
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.UserGeneralData;
|
||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserRate;
|
||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserUdemae;
|
||||
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
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;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author samnyan (privateamusement@protonmail.com)
|
||||
|
@ -30,15 +28,14 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||
private static final Logger logger = LoggerFactory.getLogger(GetUserRatingHandler.class);
|
||||
|
||||
private final BasicMapper mapper;
|
||||
|
||||
private final UserRateRepository userRateRepository;
|
||||
private final UserGeneralDataRepository userGeneralDataRepository;
|
||||
private final UserUdemaeRepository userUdemaeRepository;
|
||||
private final UserDataRepository userDataRepository;
|
||||
|
||||
public GetUserRatingHandler(BasicMapper mapper, UserRateRepository userRateRepository, UserUdemaeRepository userUdemaeRepository,
|
||||
public GetUserRatingHandler(BasicMapper mapper, UserUdemaeRepository userUdemaeRepository, UserGeneralDataRepository userGeneralDataRepository,
|
||||
UserDataRepository userDataRepository) {
|
||||
this.mapper = mapper;
|
||||
this.userRateRepository = userRateRepository;
|
||||
this.userGeneralDataRepository = userGeneralDataRepository;
|
||||
this.userUdemaeRepository = userUdemaeRepository;
|
||||
this.userDataRepository = userDataRepository;
|
||||
}
|
||||
|
@ -47,7 +44,10 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||
public String handle(Map<String, Object> request) throws JsonProcessingException {
|
||||
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<>();
|
||||
|
||||
UserRating userRating = new UserRating();
|
||||
|
@ -58,17 +58,36 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||
userRating.setRating(user.getPlayerRating());
|
||||
}
|
||||
|
||||
// TODO: Fix these, rating is incorrect
|
||||
|
||||
// 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
|
||||
userRating.setNewRatingList(emptyRating);
|
||||
|
||||
if (recentNewOptional.isPresent()) {
|
||||
String val = recentNewOptional.get().getPropertyValue();
|
||||
userRating.setNewRatingList(loadRateData(val));
|
||||
} else {
|
||||
userRating.setNewRatingList(emptyRating);
|
||||
}
|
||||
|
||||
// ??
|
||||
userRating.setNextRatingList(emptyRating);
|
||||
userRating.setNextNewRatingList(emptyRating);
|
||||
if (recentNextOptional.isPresent()) {
|
||||
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);
|
||||
if (optionalUserUdemae.isPresent()) {
|
||||
|
@ -86,4 +105,25 @@ public class GetUserRatingHandler implements BaseHandler {
|
|||
logger.info("Response: " + 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 UserLoginBonusRepository userLoginBonusRepository;
|
||||
private final UserFavoriteRepository userFavoriteRepository;
|
||||
private final UserRateRepository userRateRepository;
|
||||
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.cardService = cardService;
|
||||
this.userDataRepository = userDataRepository;
|
||||
|
@ -59,8 +59,8 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||
this.userMapRepository = userMapRepository;
|
||||
this.userLoginBonusRepository = userLoginBonusRepository;
|
||||
this.userFavoriteRepository = userFavoriteRepository;
|
||||
this.userRateRepository = userRateRepository;
|
||||
this.userUdemaeRepository = userUdemaeRepository;
|
||||
this.userGeneralDataRepository = userGeneralDataRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -198,23 +198,15 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||
|
||||
userUdemaeRepository.saveAndFlush(newUserUdemae);
|
||||
|
||||
List<UserRate> userRateList = userRating.getRatingList();
|
||||
List<UserRate> newUserRateList = new ArrayList<>();
|
||||
/* UserRate:
|
||||
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
|
||||
for (UserRate newUserRate : userRateList) {
|
||||
int musicId = newUserRate.getMusicId();
|
||||
int musicLevel = newUserRate.getLevel();
|
||||
|
||||
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);
|
||||
this.saveGeneralData(userRating.getRatingList(), newUserData, "recent_rating");
|
||||
this.saveGeneralData(userRating.getNewRatingList(), newUserData, "recent_rating_new");
|
||||
this.saveGeneralData(userRating.getNextRatingList(), newUserData, "recent_rating_next");
|
||||
this.saveGeneralData(userRating.getNextNewRatingList(), newUserData, "recent_rating_next_new");
|
||||
}
|
||||
|
||||
// UserItemList
|
||||
|
@ -303,4 +295,21 @@ public class UpsertUserAllHandler implements BaseHandler {
|
|||
|
||||
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.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
/**
|
||||
* @author samnyan (privateamusement@protonmail.com)
|
||||
*/
|
||||
@Entity(name = "Maimai2UserRate")
|
||||
@Table(name = "maimai2_user_rate")
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class UserRate implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@JsonIgnore
|
||||
private long id;
|
||||
|
||||
@JsonIgnore
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "user_id")
|
||||
private UserDetail user;
|
||||
|
||||
public class UserRate {
|
||||
private int musicId;
|
||||
private int level;
|
||||
private int romVersion;
|
||||
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;
|
Loading…
Reference in New Issue