From 916276f6266aff2a7e371675b37ae5bc4d5be987 Mon Sep 17 00:00:00 2001 From: leeedongjaee Date: Wed, 25 Jun 2025 14:10:22 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EA=B2=8C=EC=9E=84=20=EC=A0=81=EC=A4=91=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20histories=20=EC=A0=80=EC=9E=A5=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/game/service/OddEvenService.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) 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 0f283a2..aafcb10 100644 --- a/src/main/java/dev/codehouse/backend/game/service/OddEvenService.java +++ b/src/main/java/dev/codehouse/backend/game/service/OddEvenService.java @@ -9,7 +9,9 @@ import dev.codehouse.backend.game.repository.RedisRepository; import dev.codehouse.backend.user.domain.History; import dev.codehouse.backend.user.repository.UserRepository; +import dev.codehouse.backend.user.service.UserHistoryService; import lombok.RequiredArgsConstructor; +import org.springframework.cglib.core.Local; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -23,6 +25,7 @@ public class OddEvenService implements GameService { private final UserRepository userRepository; private final ObjectMapper objectMapper = new ObjectMapper(); private final Random random = new Random(); + private final UserHistoryService userHistoryService; // 라운드 키 - 시간 단위 (ex: 2025062017) private String getCurrentRoundKey() { @@ -185,6 +188,16 @@ public void bet(String username, OddEvenRequestDto dto) { redisRepository.addScoreToSortedSet(scoreKey, username, dto.getBetAmount()); } + + private String formatRoundKey(String roundKey) { + // 예: "2025062415" → "2025년 06월 24일 15시" + String year = roundKey.substring(0, 4); + String month = roundKey.substring(4, 6); + String day = roundKey.substring(6, 8); + String hour = roundKey.substring(8, 10); + return year + "년 " + month + "월 " + day + "일 " + hour + "시"; + } + /** * 50분에 호출되는 결과 계산 메서드 * 1) 현재 라운드(시 단위)의 베팅 데이터 조회 @@ -247,6 +260,15 @@ public void calculateResult() { user.setPoint(user.getPoint() + totalReturn); user.addGameResult(List.of(roundKey, "WIN", String.valueOf(originalBet), String.valueOf(shareFromLosers))); + String formatted = formatRoundKey(roundKey); + String reason = String.format("%s 게임 승리 보상 (+%dP)", formatted, shareFromLosers); + user.getHistories().add(new History( + LocalDateTime.now(), + username, + "게임승리", + reason, + totalReturn + )); userRepository.save(user); } @@ -257,6 +279,15 @@ public void calculateResult() { .orElseThrow(() -> new RuntimeException("유저를 찾을 수 없습니다: " + username)); user.addGameResult(List.of(roundKey, "LOSE", String.valueOf(bet.getBetAmount()))); + String formatted = formatRoundKey(roundKey); + String reason = String.format("%s 게임 패배 차감", formatted); + user.getHistories().add(new History( + LocalDateTime.now(), + username, + "게임 패배", + reason, + 0 + )); userRepository.save(user); } }