From 4de79654f765ec432483c0d1b0f53b7065e29992 Mon Sep 17 00:00:00 2001 From: leeedongjaee Date: Tue, 24 Jun 2025 19:35:08 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=EC=A0=95=EC=82=B0=20=EB=82=B4?= =?UTF-8?q?=EC=97=AD=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/game/service/OddEvenService.java | 79 ++++++++++++++++++- .../backend/user/domain/History.java | 3 + .../user/service/UserHistoryService.java | 2 +- 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/codehouse/backend/game/service/OddEvenService.java b/src/main/java/dev/codehouse/backend/game/service/OddEvenService.java index b1a1395..0f283a2 100644 --- a/src/main/java/dev/codehouse/backend/game/service/OddEvenService.java +++ b/src/main/java/dev/codehouse/backend/game/service/OddEvenService.java @@ -4,13 +4,13 @@ import dev.codehouse.backend.game.domain.Bet; import dev.codehouse.backend.game.dto.BetSummaryResponseDto; import dev.codehouse.backend.game.dto.MyBetDto; +import dev.codehouse.backend.user.domain.User; import dev.codehouse.backend.game.dto.OddEvenRequestDto; import dev.codehouse.backend.game.repository.RedisRepository; -import dev.codehouse.backend.user.domain.User; +import dev.codehouse.backend.user.domain.History; import dev.codehouse.backend.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; - import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -54,6 +54,64 @@ private void validateBettingTime() { } // 배팅 처리 +// @Override +// public void bet(String username, OddEvenRequestDto dto) { +// validateBettingTime(); +// +// String roundKey = getCurrentRoundKey(); +// String betsKey = getBetsKey(roundKey); +// +// User user = userRepository.findByUsername(username) +// .orElseThrow(() -> new RuntimeException("존재하지 않는 사용자입니다: " + username)); +// +// if (user.getPoint() < dto.getBetAmount()) { +// throw new IllegalArgumentException("포인트 부족"); +// } +// +// Map allBets = redisRepository.getAllBets(betsKey); +// +// Bet updatedBet; +// +// if (allBets != null && allBets.containsKey(username)) { +// Bet existingBet; +// try { +// existingBet = objectMapper.readValue(allBets.get(username), Bet.class); +// } catch (Exception e) { +// throw new RuntimeException("Redis 데이터 파싱 실패", e); +// } +// +// if (!existingBet.getBetType().equalsIgnoreCase(dto.getBetType())) { +// throw new IllegalArgumentException("'" + existingBet.getBetType() + "'에 이미 배팅한 유저는 반대 방향에 배팅할 수 없습니다."); +// } +// +// int newAmount = existingBet.getBetAmount() + dto.getBetAmount(); +// updatedBet = new Bet(username, newAmount, dto.getBetType()); +// } else { +// updatedBet = new Bet(username, dto.getBetAmount(), dto.getBetType()); +// } +// +// user.setPoint(user.getPoint() - dto.getBetAmount()); +// String betTimeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); +// user.getBetting().add(List.of( +// betTimeStr, +// dto.getBetType().equalsIgnoreCase("odd") ? "홀" : "짝", +// String.valueOf(dto.getBetAmount()) +// )); +// userRepository.save(user); +// +// String betJson; +// try { +// betJson = objectMapper.writeValueAsString(updatedBet); +// } catch (Exception e) { +// throw new RuntimeException("베팅 데이터 직렬화 실패", e); +// } +// +// redisRepository.putBet(betsKey, username, betJson); +// +// String scoreKey = getScoreKey(roundKey, dto.getBetType()); +// redisRepository.addScoreToSortedSet(scoreKey, username, dto.getBetAmount()); +// } + @Override public void bet(String username, OddEvenRequestDto dto) { validateBettingTime(); @@ -91,14 +149,29 @@ public void bet(String username, OddEvenRequestDto dto) { } user.setPoint(user.getPoint() - dto.getBetAmount()); + String betTimeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); user.getBetting().add(List.of( betTimeStr, dto.getBetType().equalsIgnoreCase("odd") ? "홀" : "짝", String.valueOf(dto.getBetAmount()) )); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시"); + String formattedDate = LocalDateTime.now().format(formatter); + String betTypeKorean = dto.getBetType().equalsIgnoreCase("odd") ? "홀" : "짝"; + + user.getHistories().add(new History( + LocalDateTime.now(), + user.getUsername(), + "배팅", + formattedDate + " 게임 " + betTypeKorean + " 배팅", + -dto.getBetAmount() + )); + userRepository.save(user); + // Redis 저장 String betJson; try { betJson = objectMapper.writeValueAsString(updatedBet); @@ -112,8 +185,6 @@ public void bet(String username, OddEvenRequestDto dto) { redisRepository.addScoreToSortedSet(scoreKey, username, dto.getBetAmount()); } - - /** * 50분에 호출되는 결과 계산 메서드 * 1) 현재 라운드(시 단위)의 베팅 데이터 조회 diff --git a/src/main/java/dev/codehouse/backend/user/domain/History.java b/src/main/java/dev/codehouse/backend/user/domain/History.java index f95243e..40c1528 100644 --- a/src/main/java/dev/codehouse/backend/user/domain/History.java +++ b/src/main/java/dev/codehouse/backend/user/domain/History.java @@ -2,6 +2,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import java.time.LocalDateTime; @@ -9,8 +10,10 @@ @Getter @Setter @AllArgsConstructor +@NoArgsConstructor public class History { private LocalDateTime time; // 시간 + private String username; private String type; // 유형 private String reason; // 내용 private int amount; // 변동 diff --git a/src/main/java/dev/codehouse/backend/user/service/UserHistoryService.java b/src/main/java/dev/codehouse/backend/user/service/UserHistoryService.java index 2d2eeb1..f3460d6 100644 --- a/src/main/java/dev/codehouse/backend/user/service/UserHistoryService.java +++ b/src/main/java/dev/codehouse/backend/user/service/UserHistoryService.java @@ -18,7 +18,7 @@ public void addHistory(String username, String type, String reason, int amount) User user = userRepository.findByUsername(username) .orElseThrow(() -> new IllegalArgumentException("User not found")); - History history = new History(LocalDateTime.now(), type, reason, amount); + History history = new History(LocalDateTime.now(), username, type, reason, amount); user.getHistories().add(history); // 포인트 수정 코드 From eed71decb7e77ca4fc02f1ff9a627e02185120a5 Mon Sep 17 00:00:00 2001 From: Jung-kr Date: Wed, 25 Jun 2025 10:20:13 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20redis=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EB=B0=B0=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 16e50bb..95fa21f 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -3,7 +3,7 @@ spring: mongodb: uri: ${MONGODB_URI} redis: - host: localhost + host: cote-redis port: 6379 jwt: secret: ${JWT_SECRET}