diff --git a/API/src/main/java/cc/fascinated/controller/ScoresController.java b/API/src/main/java/cc/fascinated/controller/ScoresController.java
index c7785cc..cf3697a 100644
--- a/API/src/main/java/cc/fascinated/controller/ScoresController.java
+++ b/API/src/main/java/cc/fascinated/controller/ScoresController.java
@@ -74,45 +74,10 @@ public class ScoresController {
@ResponseBody
@GetMapping(value = "/history/{platform}/{playerId}/{leaderboardId}")
public ResponseEntity> getScoreHistory(@PathVariable String platform, @PathVariable String playerId, @PathVariable String leaderboardId) {
- return ResponseEntity.ok(scoreService.getPreviousScore(
+ return ResponseEntity.ok(scoreService.getScoreHistory(
Platform.Platforms.getPlatform(platform),
userService.getUser(playerId),
leaderboardId
- ).getRight());
- }
-
- /**
- * A GET mapping to retrieve the score
- * history for a leaderboard
- *
- * @param platform the platform to get the history from
- * @return the score history
- * @throws BadRequestException if there were no history found
- */
- @ResponseBody
- @GetMapping(value = "/history/{platform}/{playerId}")
- public ResponseEntity> getScoreHistory(@PathVariable String platform, @PathVariable String playerId) {
- return ResponseEntity.ok(scoreService.getImprovedScores(
- Platform.Platforms.getPlatform(platform),
- userService.getUser(playerId),
- 30
- ));
- }
-
- /**
- * A GET mapping to retrieve the score
- * history for a leaderboard
- *
- * @param platform the platform to get the history from
- * @return the score history
- * @throws BadRequestException if there were no history found
- */
- @ResponseBody
- @GetMapping(value = "/improved/best/{platform}")
- public ResponseEntity> getBestImprovedScores(@PathVariable String platform) {
- return ResponseEntity.ok(scoreService.getBestImprovedScores(
- Platform.Platforms.getPlatform(platform),
- 30
));
}
}
diff --git a/API/src/main/java/cc/fascinated/model/score/Score.java b/API/src/main/java/cc/fascinated/model/score/Score.java
index fb56cd3..ca83c42 100644
--- a/API/src/main/java/cc/fascinated/model/score/Score.java
+++ b/API/src/main/java/cc/fascinated/model/score/Score.java
@@ -7,12 +7,10 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
-import org.springframework.data.annotation.Reference;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
-import java.util.List;
/**
* @author Fascinated (fascinated7)
@@ -110,12 +108,6 @@ public class Score {
*/
private final DeviceInformation deviceInformation;
- /**
- * The score history for map the score was set on.
- */
- @Reference
- private List previousScores;
-
/**
* The timestamp of when the score was set.
*/
@@ -157,15 +149,6 @@ public class Score {
return modifiers == null ? new String[0] : modifiers;
}
- /**
- * Gets the previous scores of the score.
- *
- * @return the previous scores
- */
- public List getPreviousScores() {
- return previousScores == null ? List.of() : previousScores;
- }
-
/**
* Gets if the score is ranked.
*
diff --git a/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScore.java b/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScore.java
index 2f679f4..8d411c6 100644
--- a/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScore.java
+++ b/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScore.java
@@ -6,7 +6,6 @@ import cc.fascinated.platform.Platform;
import lombok.Getter;
import java.util.Date;
-import java.util.List;
/**
* @author Fascinated (fascinated7)
@@ -30,9 +29,9 @@ public class ScoreSaberScore extends Score {
public ScoreSaberScore(long id, String playerId, Platform.Platforms platform, String platformScoreId, String leaderboardId, int rank,
double accuracy, Double pp, int score, String[] modifiers, Integer misses, Integer badCuts, DeviceInformation deviceInformation,
- List previousScores, Date timestamp, Double weight, double multiplier, int maxCombo) {
+ Date timestamp, Double weight, double multiplier, int maxCombo) {
super(id, playerId, platform, platformScoreId, leaderboardId, rank, accuracy, pp, score, modifiers, misses,
- badCuts, deviceInformation, previousScores, timestamp);
+ badCuts, deviceInformation, timestamp);
this.weight = weight;
this.multiplier = multiplier;
this.maxCombo = maxCombo;
diff --git a/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScoreResponse.java b/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScoreResponse.java
index e852928..f6c93e4 100644
--- a/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScoreResponse.java
+++ b/API/src/main/java/cc/fascinated/model/score/impl/scoresaber/ScoreSaberScoreResponse.java
@@ -2,13 +2,11 @@ package cc.fascinated.model.score.impl.scoresaber;
import cc.fascinated.model.leaderboard.Leaderboard;
import cc.fascinated.model.score.DeviceInformation;
-import cc.fascinated.model.score.Score;
import cc.fascinated.model.user.UserDTO;
import cc.fascinated.platform.Platform;
import lombok.Getter;
import java.util.Date;
-import java.util.List;
/**
* @author Fascinated (fascinated7)
@@ -27,10 +25,9 @@ public class ScoreSaberScoreResponse extends ScoreSaberScore {
public ScoreSaberScoreResponse(long id, String playerId, Platform.Platforms platform, String platformScoreId, String leaderboardId, int rank,
double accuracy, double pp, int score, String[] modifiers, int misses, int badCuts, DeviceInformation deviceInformation,
- List previousScores, Date timestamp, double weight, double multiplier, int maxCombo, UserDTO user,
- Leaderboard leaderboard) {
+ Date timestamp, double weight, double multiplier, int maxCombo, UserDTO user, Leaderboard leaderboard) {
super(id, playerId, platform, platformScoreId, leaderboardId, rank, accuracy, pp, score, modifiers, misses, badCuts,
- deviceInformation, previousScores, timestamp, weight, multiplier, maxCombo);
+ deviceInformation, timestamp, weight, multiplier, maxCombo);
this.user = user;
this.leaderboard = leaderboard;
}
diff --git a/API/src/main/java/cc/fascinated/model/user/history/HistoryPoint.java b/API/src/main/java/cc/fascinated/model/user/history/HistoryPoint.java
index fbd75ef..b5601a4 100644
--- a/API/src/main/java/cc/fascinated/model/user/history/HistoryPoint.java
+++ b/API/src/main/java/cc/fascinated/model/user/history/HistoryPoint.java
@@ -65,7 +65,7 @@ public class HistoryPoint {
* eg: if the user doesn't have their data tracked by
* {@link Platform#trackPlayerMetrics()} then some
* data will be inaccurate or missing.
- * This will only affect rank, countryRank, and pp
+ * This will only affect {@link #rank}, {@link #countryRank}, and {@link #pp}.
*
*
* @return true if the data is possibly inaccurate, false otherwise
diff --git a/API/src/main/java/cc/fascinated/repository/ScoreRepository.java b/API/src/main/java/cc/fascinated/repository/ScoreRepository.java
index 6190f8a..1fa6d24 100644
--- a/API/src/main/java/cc/fascinated/repository/ScoreRepository.java
+++ b/API/src/main/java/cc/fascinated/repository/ScoreRepository.java
@@ -13,7 +13,7 @@ import java.util.List;
/**
* @author Fascinated (fascinated7)
*/
-public interface ScoreRepository extends MongoRepository {
+public interface ScoreRepository extends MongoRepository {
/**
* Gets the top ranked scores from the platform.
*
@@ -78,11 +78,10 @@ public interface ScoreRepository extends MongoRepository {
* @return the score
*/
@Aggregation(pipeline = {
- "{ $match: { platform: ?0, leaderboardId: ?1, playerId: ?2 } }",
- "{ $sort: { pp: -1 } }",
- "{ $limit: 1 }"
+ "{ $match: { platform: ?0, playerId: ?1, leaderboardId: ?2 } }",
+ "{ $sort: { timestamp: -1 } }",
})
- Score findScore(@NonNull Platform.Platforms platform, @NonNull String playerId, @NonNull String leaderboardId);
+ List findScores(@NonNull Platform.Platforms platform, @NonNull String playerId, @NonNull String leaderboardId);
/**
* Updates a scores pp value.
diff --git a/API/src/main/java/cc/fascinated/services/ScoreService.java b/API/src/main/java/cc/fascinated/services/ScoreService.java
index bd21188..417e624 100644
--- a/API/src/main/java/cc/fascinated/services/ScoreService.java
+++ b/API/src/main/java/cc/fascinated/services/ScoreService.java
@@ -3,7 +3,6 @@ package cc.fascinated.services;
import cc.fascinated.common.DateUtils;
import cc.fascinated.common.EnumUtils;
import cc.fascinated.common.MathUtils;
-import cc.fascinated.common.Tuple;
import cc.fascinated.model.leaderboard.Leaderboard;
import cc.fascinated.model.score.DeviceInformation;
import cc.fascinated.model.score.Score;
@@ -101,7 +100,6 @@ public class ScoreService {
score.getMisses(),
score.getBadCuts(),
score.getDeviceInformation(),
- score.getPreviousScores(),
score.getTimestamp(),
scoreSaberScore.getWeight(),
scoreSaberScore.getMultiplier(),
@@ -194,18 +192,6 @@ public class ScoreService {
ScoreSaberScoreToken score = token.getScore();
User user = userService.getUser(score.getLeaderboardPlayerInfo().getId());
- Tuple> previousScoreTuple = this.getPreviousScore(Platform.Platforms.SCORESABER, user, leaderboard.getId());
- List previousScores = previousScoreTuple.getRight();
- Score previousScore = previousScoreTuple.getLeft();
- boolean previousScoreExists = previousScore != null && (previousScores != null && !previousScores.isEmpty());
- if (previousScoreExists) { // There is a previous score
- // Delete the previous score
- scoreRepository.delete(previousScore);
- } else {
- // There are no previous scores, so set it to null to save data
- previousScores = null;
- }
-
double accuracy = leaderboard.getMaxScore() != 0 ? ((double) score.getBaseScore() / leaderboard.getMaxScore()) * 100 : 0;
if (accuracy == 0) {
log.warn("[Scoresaber] Leaderboard '{}' has a max score of 0, unable to calculate accuracy :(", leaderboard.getId());
@@ -231,71 +217,29 @@ public class ScoreService {
score.getDeviceControllerLeft() == null ? DeviceController.UNKNOWN : DeviceController.getByName(score.getDeviceControllerLeft()),
score.getDeviceControllerRight() == null ? DeviceController.UNKNOWN : DeviceController.getByName(score.getDeviceControllerRight())
),
- previousScores,
DateUtils.getDateFromIsoString(score.getTimeSet()),
score.getWeight() == 0 ? null : score.getWeight(), // no weight, set to null to save data
score.getMultiplier(),
score.getMaxCombo()
);
this.saveScore(user, scoreSaberScore);
- this.logScore(Platform.Platforms.SCORESABER, Leaderboard.getFromScoreSaberToken(leaderboard), scoreSaberScore, user,
- previousScoreExists && previousScore.getScore() < scoreSaberScore.getScore());
- if (scoreSaberScore.getDeviceInformation().containsUnknownDevices()) {
- log.warn(" - Score contains unknown device: hmd: {}, controller left: {}, controller right: {}",
- score.getDeviceHmd(),
- score.getDeviceControllerLeft(),
- score.getDeviceControllerRight()
- );
- }
+ this.logScore(Platform.Platforms.SCORESABER, Leaderboard.getFromScoreSaberToken(leaderboard), scoreSaberScore, user);
}
/**
- * Gets the previous score of a user.
+ * Gets the previous scores for a leaderboard.
*
* @param platform The platform to get the score from.
* @param user The user to get the score from.
* @param leaderboardId The leaderboard id to get the score from.
* @return The previous score.
*/
- public Tuple> getPreviousScore(@NonNull Platform.Platforms platform, @NonNull User user, @NonNull String leaderboardId) {
- Score score = this.scoreRepository.findScore(platform, user.getSteamId(), leaderboardId);
- List previousScores = new ArrayList<>();
- if (score == null) { // There is a previous score
- return new Tuple<>(null, previousScores);
- }
- if (score.getPreviousScores() != null) {
- previousScores.addAll(score.getPreviousScores()); // Add the previous scores
- }
- score.setPreviousScores(null); // Clear the previous scores
- previousScores.add(score); // Add the previous score
+ public @NonNull List getScoreHistory(@NonNull Platform.Platforms platform, @NonNull User user, @NonNull String leaderboardId) {
+ List foundScores = new ArrayList<>(this.scoreRepository.findScores(platform, user.getSteamId(), leaderboardId));
// Sort previous scores by timestamp (newest -> oldest)
- previousScores.sort(Comparator.comparing(Score::getTimestamp).reversed());
-
- return new Tuple<>(score, previousScores);
- }
-
- /**
- * Gets the improved scores of a user.
- *
- * @param platform The platform to get the scores from.
- * @param user The user to get the scores from.
- * @param days The amount of days in the past to get the scores from.
- * @return The improved scores.
- */
- public List getImprovedScores(@NonNull Platform.Platforms platform, @NonNull User user, int days) {
- return scoreRepository.getUserImprovedScores(platform, user.getSteamId(), DateUtils.getDaysAgo(days));
- }
-
- /**
- * Gets the best improved scores from the platform.
- *
- * @param platform The platform to get the scores from.
- * @param days The amount of days in the past to get the scores from.
- * @return The scores.
- */
- public List getBestImprovedScores(@NonNull Platform.Platforms platform, int days) {
- return scoreRepository.getBestImprovedScores(platform, DateUtils.getDaysAgo(days));
+ foundScores.sort(Comparator.comparing(Score::getTimestamp).reversed());
+ return foundScores;
}
/**
@@ -326,13 +270,12 @@ public class ScoreService {
* @param user The user who set the score.
*/
private void logScore(@NonNull Platform.Platforms platform, @NonNull Leaderboard leaderboard, @NonNull Score score,
- @NonNull User user, boolean improvedScore) {
+ @NonNull User user) {
String platformName = EnumUtils.getEnumName(platform);
boolean isRanked = score.getPp() != 0;
- log.info("[{}] {}Tracked{} Score! id: {}, acc: {}%, {} score id: {},{} leaderboard: {}, difficulty: {}, player: {} ({})",
+ log.info("[{}] Tracked{} Score! id: {}, acc: {}%, {} score id: {},{} leaderboard: {}, difficulty: {}, player: {} ({})",
platformName,
- improvedScore ? "Improved " : "",
isRanked ? " Ranked" : "",
score.getId(),
MathUtils.format(score.getAccuracy(), 2),