diff --git a/src/main/java/com/gg/server/domain/coin/service/CoinHistoryService.java b/src/main/java/com/gg/server/domain/coin/service/CoinHistoryService.java index be065fcda..3eb3179e2 100644 --- a/src/main/java/com/gg/server/domain/coin/service/CoinHistoryService.java +++ b/src/main/java/com/gg/server/domain/coin/service/CoinHistoryService.java @@ -28,15 +28,17 @@ public void addNormalCoin(User user){ } @Transactional - public void addRankWinCoin(User user){ + public int addRankWinCoin(User user){ int amount = coinPolicyRepository.findTopByOrderByCreatedAtDesc().getRankWin(); addCoinHistory(new CoinHistory(user, HistoryType.RANKWIN.getHistory(), amount)); + return amount; } @Transactional - public void addRankLoseCoin(User user){ + public int addRankLoseCoin(User user){ int amount = coinPolicyRepository.findTopByOrderByCreatedAtDesc().getRankLose(); addCoinHistory(new CoinHistory(user, HistoryType.RANKLOSE.getHistory(), amount)); + return amount; } private void addCoinHistory(CoinHistory coinHistory){ diff --git a/src/main/java/com/gg/server/domain/coin/service/UserCoinChangeService.java b/src/main/java/com/gg/server/domain/coin/service/UserCoinChangeService.java index f58b2e168..a2ba56835 100644 --- a/src/main/java/com/gg/server/domain/coin/service/UserCoinChangeService.java +++ b/src/main/java/com/gg/server/domain/coin/service/UserCoinChangeService.java @@ -2,6 +2,9 @@ import com.gg.server.domain.coin.data.CoinPolicyRepository; import com.gg.server.domain.coin.dto.UserGameCoinResultDto; +import com.gg.server.domain.game.service.GameFindService; +import com.gg.server.domain.team.data.Team; +import com.gg.server.domain.team.data.TeamUser; import com.gg.server.domain.user.data.User; import com.gg.server.domain.user.data.UserRepository; import com.gg.server.domain.user.exception.UserNotFoundException; @@ -9,12 +12,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor public class UserCoinChangeService { private final CoinPolicyRepository coinPolicyRepository; private final CoinHistoryService coinHistoryService; private final UserRepository userRepository; + private final GameFindService gameFindService; @Transactional public UserGameCoinResultDto addNormalGameCoin(Long userId) { @@ -25,4 +31,33 @@ public UserGameCoinResultDto addNormalGameCoin(Long userId) { coinHistoryService.addNormalCoin(user); return new UserGameCoinResultDto(user.getGgCoin(), coinIncrement); } + + @Transactional + public UserGameCoinResultDto addRankGameCoin(Long gameId, Long userId) { + User user = userRepository.findById(userId).orElseThrow(() -> new UserNotFoundException()); + int coinIncrement; + + if (userIsWinner(gameId, user)) + coinIncrement = coinHistoryService.addRankWinCoin(user); + else + coinIncrement = coinHistoryService.addRankLoseCoin(user); + + user.addGgCoin(coinIncrement); + return new UserGameCoinResultDto(user.getGgCoin(), coinIncrement); + } + + private boolean userIsWinner(Long gameId, User user) { + List teams = gameFindService.findByGameId(gameId).getTeams(); + + for(Team team: teams) { + for (TeamUser teamUser : team.getTeamUsers()){ + if (teamUser.getUser().getId() == user.getId() && team.getWin() == true) + return true; + else if (teamUser.getUser().getId() == user.getId() && team.getWin() == false) + return false; + } + } + + return false; + } } diff --git a/src/main/java/com/gg/server/domain/game/dto/ExpChangeResultResDto.java b/src/main/java/com/gg/server/domain/game/dto/ExpChangeResultResDto.java index 715933dd7..d8303f3fb 100644 --- a/src/main/java/com/gg/server/domain/game/dto/ExpChangeResultResDto.java +++ b/src/main/java/com/gg/server/domain/game/dto/ExpChangeResultResDto.java @@ -30,16 +30,6 @@ public ExpChangeResultResDto(Integer beforeExp, Integer currentExp, UserGameCoin this.coinIncrement = userGameCoinResultDto.getCoinIncrement(); } - //랭크 게임 수정 후 사라질 생성자 - public ExpChangeResultResDto(Integer beforeExp, Integer currentExp) { - this.beforeExp = ExpLevelCalculator.getCurrentLevelMyExp(beforeExp); - this.beforeLevel = ExpLevelCalculator.getLevel(beforeExp); - this.beforeMaxExp = ExpLevelCalculator.getLevelMaxExp(beforeLevel); - this.increasedExp = currentExp - beforeExp; - this.increasedLevel = ExpLevelCalculator.getLevel(currentExp) - this.beforeLevel; - this.afterMaxExp = ExpLevelCalculator.getLevelMaxExp(this.beforeLevel + this.increasedLevel); - } - @Override public boolean equals(Object obj) { if (obj == this) { diff --git a/src/main/java/com/gg/server/domain/game/dto/PPPChangeResultResDto.java b/src/main/java/com/gg/server/domain/game/dto/PPPChangeResultResDto.java index 92c0ababe..0faed8f19 100644 --- a/src/main/java/com/gg/server/domain/game/dto/PPPChangeResultResDto.java +++ b/src/main/java/com/gg/server/domain/game/dto/PPPChangeResultResDto.java @@ -1,5 +1,6 @@ package com.gg.server.domain.game.dto; +import com.gg.server.domain.coin.dto.UserGameCoinResultDto; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,8 +11,8 @@ public class PPPChangeResultResDto extends ExpChangeResultResDto { private Integer changedPpp; private Integer beforePpp; - public PPPChangeResultResDto(Integer beforeExp, Integer currentExp, Integer beforePpp, Integer afterPpp) { - super(beforeExp, currentExp); + public PPPChangeResultResDto(Integer beforeExp, Integer currentExp, Integer beforePpp, Integer afterPpp, UserGameCoinResultDto userGameCoinResultDto) { + super(beforeExp, currentExp, userGameCoinResultDto); this.changedPpp = afterPpp - beforePpp; this.beforePpp = beforePpp; } diff --git a/src/main/java/com/gg/server/domain/game/service/GameService.java b/src/main/java/com/gg/server/domain/game/service/GameService.java index 773290f44..8b13fe31d 100644 --- a/src/main/java/com/gg/server/domain/game/service/GameService.java +++ b/src/main/java/com/gg/server/domain/game/service/GameService.java @@ -22,7 +22,6 @@ import com.gg.server.global.exception.custom.InvalidParameterException; import com.gg.server.global.utils.ExpLevelCalculator; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Caching; import org.springframework.stereotype.Service; @@ -33,7 +32,6 @@ @Service @RequiredArgsConstructor -@Slf4j public class GameService { private final GameRepository gameRepository; private final TeamUserRepository teamUserRepository; @@ -123,15 +121,16 @@ public ExpChangeResultResDto expChangeResult(Long gameId, Long userId) { } } - @Transactional(readOnly = true) + @Transactional public PPPChangeResultResDto pppChangeResult(Long gameId, Long userId) throws PChangeNotExistException { Season season = gameFindService.findByGameId(gameId).getSeason(); List pppHistory = pChangeService.findPPPChangeHistory(gameId, userId, season.getId()); List expHistory = pChangeService.findExpChangeHistory(gameId, userId); + UserGameCoinResultDto userGameCoinResultDto = userCoinChangeService.addRankGameCoin(gameId, userId); return new PPPChangeResultResDto(expHistory.size() <= 1 ? 0 : expHistory.get(1).getExp(), pppHistory.get(0).getExp(), pppHistory.size() <= 1 ? season.getStartPpp() : pppHistory.get(1).getPppResult(), - pppHistory.get(0).getPppResult()); + pppHistory.get(0).getPppResult(), userGameCoinResultDto); } public void expUpdates(Game game, List teamUsers) { diff --git a/src/test/java/com/gg/server/domain/coin/service/UserCoinChangeServiceTest.java b/src/test/java/com/gg/server/domain/coin/service/UserCoinChangeServiceTest.java index b4899cc27..53114053d 100644 --- a/src/test/java/com/gg/server/domain/coin/service/UserCoinChangeServiceTest.java +++ b/src/test/java/com/gg/server/domain/coin/service/UserCoinChangeServiceTest.java @@ -57,4 +57,28 @@ void addNormalGameService() { assertThat(coinPolicyRepository.findTopByOrderByCreatedAtDesc().getNormal()).isEqualTo(userGameCoinResultDto.getCoinIncrement()); System.out.println(coinHistoryRepository.findFirstByOrderByIdDesc().getHistory()); } + + @Test + @DisplayName("랭크 게임 승리 재화 증가 서비스 테스트") + void addRankWinGameService() { + User user = userRepository.getUserByIntraId("cheolee"); + + UserGameCoinResultDto userGameCoinResultDto = userCoinChangeService.addRankGameCoin(3606L, user.getId());//본인의 게임Id와 id 값 + + assertThat(user.getGgCoin()).isEqualTo(userGameCoinResultDto.getAfterCoin()); + assertThat(coinPolicyRepository.findTopByOrderByCreatedAtDesc().getRankWin()).isEqualTo(userGameCoinResultDto.getCoinIncrement()); + System.out.println(coinHistoryRepository.findFirstByOrderByIdDesc().getHistory()); + } + + @Test + @DisplayName("랭크 게임 패배 재화 증가 서비스 테스트") + void addRankLoseGameService() { + User user = userRepository.getUserByIntraId("cheolee"); + + UserGameCoinResultDto userGameCoinResultDto = userCoinChangeService.addRankGameCoin(3689L, user.getId()); + + assertThat(user.getGgCoin()).isEqualTo(userGameCoinResultDto.getAfterCoin()); + assertThat(coinPolicyRepository.findTopByOrderByCreatedAtDesc().getRankLose()).isEqualTo(userGameCoinResultDto.getCoinIncrement()); + System.out.println(coinHistoryRepository.findFirstByOrderByIdDesc().getHistory()); + } } \ No newline at end of file