From 64b887bcd36d60499535e82fe60cd8aa304393ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=92=E1=85=B4=E1=84=89?= =?UTF-8?q?=E1=85=A5=E1=86=BC?= Date: Sun, 12 May 2024 20:12:48 +0900 Subject: [PATCH 1/3] Update button game scheduler disabled --- .../ButtonGameCalculateScheduler.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/gsmgogo-batch/src/main/java/team/gsmgogo/scheduler/ButtonGameCalculateScheduler.java b/gsmgogo-batch/src/main/java/team/gsmgogo/scheduler/ButtonGameCalculateScheduler.java index 7538059..7d806dd 100644 --- a/gsmgogo-batch/src/main/java/team/gsmgogo/scheduler/ButtonGameCalculateScheduler.java +++ b/gsmgogo-batch/src/main/java/team/gsmgogo/scheduler/ButtonGameCalculateScheduler.java @@ -31,21 +31,22 @@ public class ButtonGameCalculateScheduler { private final UserJpaRepository userJpaRepository; private final ButtonGameParticipateQueryDslRepository buttonGameParticipateQueryDslRepository; - @Scheduled(cron = "0 0 23 * * *") - public void start() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { +// @Scheduled(cron = "0 0 23 * * *") +// public void start() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException { +// +// Map> jobParametersMap = new HashMap<>(); +// jobParametersMap.put("button-game-time", new JobParameter(System.currentTimeMillis(), String.class)); +// JobParameters jobParameters = new JobParameters(jobParametersMap); +// +// jobLauncher.run( +// new CalculateButtonGameJob( +// jobRepository, +// platformTransactionManager, +// buttonGameRepository, +// userJpaRepository, +// buttonGameParticipateQueryDslRepository).calculateButtonGameJob(), +// jobParameters +// ); +// } - Map> jobParametersMap = new HashMap<>(); - jobParametersMap.put("button-game-time", new JobParameter(System.currentTimeMillis(), String.class)); - JobParameters jobParameters = new JobParameters(jobParametersMap); - - jobLauncher.run( - new CalculateButtonGameJob( - jobRepository, - platformTransactionManager, - buttonGameRepository, - userJpaRepository, - buttonGameParticipateQueryDslRepository).calculateButtonGameJob(), - jobParameters - ); - } } From 2d64ff4650cbe60bd72d41d1c70153f302a18acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=92=E1=85=B4=E1=84=89?= =?UTF-8?q?=E1=85=A5=E1=86=BC?= Date: Sun, 12 May 2024 20:17:41 +0900 Subject: [PATCH 2/3] Add point limit validation --- .../game/service/impl/ButtonGameServiceImpl.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java b/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java index 42d4da2..d176422 100644 --- a/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java +++ b/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import team.gsmgogo.domain.bet.repository.BetJpaRepository; import team.gsmgogo.domain.buttongame.entity.ButtonGameEntity; import team.gsmgogo.domain.buttongame.repository.ButtonGameRepository; import team.gsmgogo.domain.buttongameparticipate.entity.ButtonGameParticipate; @@ -15,6 +16,8 @@ import team.gsmgogo.global.exception.error.ExpectedException; import team.gsmgogo.global.facade.UserFacade; +import java.util.concurrent.atomic.AtomicInteger; + @Service @RequiredArgsConstructor public class ButtonGameServiceImpl implements ButtonGameService { @@ -22,6 +25,9 @@ public class ButtonGameServiceImpl implements ButtonGameService { private final UserFacade userFacade; private final ButtonGameRepository buttonGameRepository; private final ButtonGameParticipateRepository buttonGameParticipateRepository; + private final BetJpaRepository buttonGameParticipate; + + private final int LIMIT_POINT = 500_000; @Override @Transactional(isolation = Isolation.SERIALIZABLE) @@ -35,6 +41,13 @@ public void execute(ButtonGameRequest request) { if (buttonGameParticipateRepository.existsByButtonGameAndUser(buttonGame, currentUser)) throw new ExpectedException("이미 버튼을 눌렀습니다.", HttpStatus.BAD_REQUEST); + AtomicInteger betPoint = new AtomicInteger(); + buttonGameParticipate.findByUser(currentUser) + .forEach(bet -> betPoint.addAndGet(bet.getBetPoint().intValue())); + + if ((currentUser.getPoint() + betPoint.get()) >= LIMIT_POINT) + throw new ExpectedException("50만 포인트 이상 보유한 유저는 버튼게임에 참여할 수 없습니다.", HttpStatus.BAD_REQUEST); + ButtonGameParticipate buttonGameParticipate = ButtonGameParticipate.builder() .buttonGame(buttonGame) .user(currentUser) From c204b7ac5011af5130d8cac3cf55e32583ee86cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=92=E1=85=B4=E1=84=89?= =?UTF-8?q?=E1=85=A5=E1=86=BC?= Date: Sun, 12 May 2024 20:27:16 +0900 Subject: [PATCH 3/3] Update limit validation, not end bet --- .../domain/game/service/impl/ButtonGameServiceImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java b/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java index d176422..17f6047 100644 --- a/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java +++ b/gsmgogo-api/src/main/java/team/gsmgogo/domain/game/service/impl/ButtonGameServiceImpl.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; +import team.gsmgogo.domain.bet.entity.BetEntity; import team.gsmgogo.domain.bet.repository.BetJpaRepository; import team.gsmgogo.domain.buttongame.entity.ButtonGameEntity; import team.gsmgogo.domain.buttongame.repository.ButtonGameRepository; @@ -16,6 +17,7 @@ import team.gsmgogo.global.exception.error.ExpectedException; import team.gsmgogo.global.facade.UserFacade; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @Service @@ -43,6 +45,8 @@ public void execute(ButtonGameRequest request) { AtomicInteger betPoint = new AtomicInteger(); buttonGameParticipate.findByUser(currentUser) + .stream() + .filter(bet -> !bet.getMatch().getIsEnd()).toList() .forEach(bet -> betPoint.addAndGet(bet.getBetPoint().intValue())); if ((currentUser.getPoint() + betPoint.get()) >= LIMIT_POINT)