From 5289690406a6f1d65c0cd73d6c17e20b55c80b3b Mon Sep 17 00:00:00 2001 From: hyunkyu Date: Wed, 20 Sep 2023 14:46:06 +0900 Subject: [PATCH] =?UTF-8?q?tier=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gg/server/domain/game/GameController.java | 3 +++ .../server/domain/rank/redis/RankRedisService.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gg/server/domain/game/GameController.java b/src/main/java/com/gg/server/domain/game/GameController.java index 9ea9ec2cc..3c8a3f835 100644 --- a/src/main/java/com/gg/server/domain/game/GameController.java +++ b/src/main/java/com/gg/server/domain/game/GameController.java @@ -8,6 +8,7 @@ import com.gg.server.domain.game.exception.ScoreNotMatchedException; import com.gg.server.domain.game.service.GameFindService; import com.gg.server.domain.game.service.GameService; +import com.gg.server.domain.rank.redis.RankRedisService; import com.gg.server.domain.user.dto.UserDto; import com.gg.server.global.exception.ErrorCode; import com.gg.server.global.exception.custom.InvalidParameterException; @@ -29,6 +30,7 @@ public class GameController { private final GameService gameService; private final GameFindService gameFindService; + private final RankRedisService rankRedisService; @GetMapping GameListResDto allGameList(@Valid GameListReqDto gameReq) { @@ -73,6 +75,7 @@ synchronized ResponseEntity createRankResult(@Valid @RequestBody RankResultReqDt if (!gameService.createRankResult(reqDto, user.getId())) { throw new ScoreNotMatchedException(); } + rankRedisService.updateAllTier(); return new ResponseEntity(HttpStatus.CREATED); } diff --git a/src/main/java/com/gg/server/domain/rank/redis/RankRedisService.java b/src/main/java/com/gg/server/domain/rank/redis/RankRedisService.java index 59ea58c8e..2f5db5f15 100644 --- a/src/main/java/com/gg/server/domain/rank/redis/RankRedisService.java +++ b/src/main/java/com/gg/server/domain/rank/redis/RankRedisService.java @@ -6,6 +6,7 @@ import com.gg.server.domain.rank.data.RankRepository; import com.gg.server.domain.rank.exception.RankNotFoundException; import com.gg.server.domain.season.data.Season; +import com.gg.server.domain.season.service.SeasonFindService; import com.gg.server.domain.team.data.TeamUser; import com.gg.server.domain.tier.data.Tier; import com.gg.server.domain.tier.data.TierRepository; @@ -18,6 +19,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.List; @Service @@ -28,6 +30,7 @@ public class RankRedisService { private final TierRepository tierRepository; private final PChangeService pChangeService; private final RankRepository rankRepository; + private final SeasonFindService seasonFindService; public Integer getUserPpp(Long userId, Long seasonId) { String hashKey = RedisKeyManager.getHashKey(seasonId); @@ -45,7 +48,7 @@ public void updateRankRedis(TeamUser myTeamUser, TeamUser enemyTeamUser, Game ga updatePPP(enemyTeamUser, enemyTeam, myTeamUser.getTeam().getScore(), enemyPPP, myPPP, game.getSeason().getId()); updateRankUser(key, zsetKey, myTeamUser.getUser().getId(), myTeam); updateRankUser(key, zsetKey, enemyTeamUser.getUser().getId(), enemyTeam); - updateAllTier(key, zsetKey, game.getSeason()); +// updateAllTier(key, zsetKey, game.getSeason()); pChangeService.addPChange(game, myTeamUser.getUser(), myTeam.getPpp(), true); pChangeService.addPChange(game, enemyTeamUser.getUser(), enemyTeam.getPpp(), false); } @@ -72,10 +75,14 @@ public void updatePPP(TeamUser teamuser, RankRedis myTeam, int enemyScore, Integ } - public void updateAllTier(String key, String zSetKey, Season season) { + @Transactional + public void updateAllTier() { // 전체 레디스 랭크 티어 새로고침하는 로직 + Season currentSeason = seasonFindService.findCurrentSeason(LocalDateTime.now()); + String key = RedisKeyManager.getHashKey(currentSeason.getId()); + String zSetKey = RedisKeyManager.getZSetKey(currentSeason.getId()); List rankRedisList = rankRedisRepository.findAllRanksOrderByPppDesc(key); - Long totalRankPlayers = rankRepository.countRealRankPlayers(season.getId()); + Long totalRankPlayers = rankRepository.countRealRankPlayers(currentSeason.getId()); List tierList = tierRepository.findAll(Sort.by(Sort.Direction.ASC, "id")); int top30percentPpp = rankRedisList.get((int) (totalRankPlayers * 0.3)).getPpp();