diff --git a/src/main/java/delta/codecharacter/server/service/LevelStatusService.java b/src/main/java/delta/codecharacter/server/service/LevelStatusService.java index 8c93c787..10fc3e2c 100644 --- a/src/main/java/delta/codecharacter/server/service/LevelStatusService.java +++ b/src/main/java/delta/codecharacter/server/service/LevelStatusService.java @@ -33,6 +33,8 @@ public class LevelStatusService { */ @Transactional public void initializeLevelStatus(@NotNull Integer userId) { + if (levelStatusRepository.findByUserId(userId) != null) + return; List initialStars = Arrays.asList(0); LevelStatus levelStatus = LevelStatus.builder() .userId(userId) diff --git a/src/main/java/delta/codecharacter/server/service/MatchService.java b/src/main/java/delta/codecharacter/server/service/MatchService.java index aca12382..c1d996c5 100644 --- a/src/main/java/delta/codecharacter/server/service/MatchService.java +++ b/src/main/java/delta/codecharacter/server/service/MatchService.java @@ -417,6 +417,7 @@ public void updateMatch(UpdateMatchRequest updateMatchRequest) { return; } Verdict matchVerdict = deduceMatchVerdict(updateMatchRequest.getGameResults()); + SubmitStatus submitStatus = submitStatusRepository.findByUserId(match.getPlayerId1()); List gameLogsList = new ArrayList<>(); var gameResults = updateMatchRequest.getGameResults(); @@ -434,7 +435,11 @@ public void updateMatch(UpdateMatchRequest updateMatchRequest) { Integer playerId = match.getPlayerId1(); socketService.sendMessage(socketMatchResultDest + playerId, gameLogsList.toString()); String matchMessage = getMatchResultByVerdict(matchId, matchVerdict, playerId); - socketService.sendMessage(socketAlertMessageDest + playerId, matchMessage); + + // If this is a test match for submitting code, there is no need to display match result + if (!(submitStatus !=null && submitStatus.getIsPending())) + socketService.sendMessage(socketAlertMessageDest + playerId, matchMessage); + createMatchNotification(playerId, matchMessage); } @@ -497,10 +502,10 @@ public void updateMatch(UpdateMatchRequest updateMatchRequest) { if (starCount > 0) levelStatusService.updateLevelStatus(playerId, currentLevel, starCount); - SubmitStatus submitStatus = submitStatusRepository.findByUserId(playerId); - if (submitStatus !=null && submitStatus.getIsPending()) + if (submitStatus !=null && submitStatus.getIsPending()) { versionControlService.confirmLockedCode(playerId); - socketService.sendMessage(socketAlertMessageDest + match.getPlayerId1(), "Code Locked"); + socketService.sendMessage(socketAlertMessageDest + match.getPlayerId1(), "Code Locked"); + } } matchRepository.save(match); diff --git a/src/main/java/delta/codecharacter/server/service/UserRatingService.java b/src/main/java/delta/codecharacter/server/service/UserRatingService.java index 571f563d..eea31b6f 100644 --- a/src/main/java/delta/codecharacter/server/service/UserRatingService.java +++ b/src/main/java/delta/codecharacter/server/service/UserRatingService.java @@ -104,9 +104,9 @@ public void calculateMatchRatings(Integer userId1, Integer userId2, Verdict verd // Calculate weighted rating deviations for both players Double weightedRatingDeviation1 = ratingCalculator.calculateWeightedRatingDeviation( - rating1.getRating(), matchService.getRecentMatchTime(userId1)); + rating1.getRatingDeviation(), matchService.getRecentMatchTime(userId1)); Double weightedRatingDeviation2 = ratingCalculator.calculateWeightedRatingDeviation( - rating2.getRating(), matchService.getRecentMatchTime(userId2)); + rating2.getRatingDeviation(), matchService.getRecentMatchTime(userId2)); rating1.setRatingDeviation(weightedRatingDeviation1); diff --git a/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java b/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java index a05237ec..e1432575 100644 --- a/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java +++ b/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java @@ -10,7 +10,7 @@ public class RatingCalculator { // Constants private Double q = (Math.log(10) / 400); - private Double minRatingDeviation = 50d; + private Double minRatingDeviation = 30d; // Amount which decides how much a player's rating deviation changes every time period private Double c = 416d; @@ -25,10 +25,10 @@ public class RatingCalculator { * @return g(rd) */ private Double calculateGRD(Double rd) { - Double numerator = 1d + 3d * (q * q) * (rd * rd); + Double numerator = 3d * (q * q) * (rd * rd); Double pi = Math.PI; Double denominator = pi * pi; - return (1d / Math.sqrt(numerator / denominator)); + return (1d / Math.sqrt(1d + (numerator / denominator))); } /**