Skip to content

Conversation

@otter2023
Copy link
Member

@otter2023 otter2023 commented Nov 1, 2025

Summary by CodeRabbit

  • 버그 수정
    • 베팅 포인트 검증 로직을 강화하여 최소 포인트 요구사항을 정확하게 적용합니다.
    • 무료 베팅 시 포인트 제한을 유연하게 처리하고, 유료 베팅 시 최소 포인트 조건을 명확히 적용합니다.
    • 포인트 부족 시 명확한 오류 메시지를 제공합니다.

@coderabbitai
Copy link

coderabbitai bot commented Nov 1, 2025

Walkthrough

Spring 스케줄링 지원을 활성화하고, 베팅 요청의 스테이크 포인트 검증 로직을 재구성했습니다. @min 제약 조건을 제거하고 커스텀 유효성 검사 메서드로 대체하며, 서비스 레벨에서 검증을 수행하고 새로운 오류 코드를 추가했습니다.

Changes

응집성 / 파일(들) 변경 요약
Spring 스케줄링 설정
backend/src/main/java/org/sejongisc/backend/BackendApplication.java
@EnableScheduling 어노테이션 추가하여 스케줄링 기능 활성화
베팅 유효성 검사 리팩토링
backend/src/main/java/org/sejongisc/backend/betting/dto/UserBetRequest.java
stakePoints에서 @min(10) 제약 조건 제거 및 @AssertTrue 메서드 isStakePointsValid() 추가로 조건부 검증 구현
베팅 서비스 검증 강화
backend/src/main/java/org/sejongisc/backend/betting/service/BettingService.java
postUserBet 메서드에 사전 조건 검증 추가: 무료 베팅이 아닌 경우 스테이크 포인트 유효성 검사
오류 코드 확장
backend/src/main/java/org/sejongisc/backend/common/exception/ErrorCode.java
BET_POINT_TOO_LOW 오류 코드 추가 및 enum 구조 업데이트

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Controller
    participant Service as BettingService
    participant Validator as Validator
    participant Repo as Repository
    participant PointService as PointService

    User->>Controller: postUserBet(UserBetRequest)
    activate Controller
    Controller->>Validator: validate(request)
    activate Validator
    Validator->>Validator: isStakePointsValid()
    Note over Validator: Checks: free OR<br/>(stakePoints != null AND >= 10)
    alt Validation Fails
        Validator-->>Controller: ConstraintViolation
        Controller-->>User: 400 Bad Request
    else Validation Passes
        Validator-->>Controller: Valid
    end
    deactivate Validator
    
    Controller->>Service: postUserBet(request)
    activate Service
    
    alt Not Free Bet
        Service->>Service: Check isStakePointsValid()
        alt Invalid Stake Points
            Service-->>Controller: BET_POINT_TOO_LOW Exception
            Controller-->>User: 409 Conflict
        else Valid Stake Points
            Service->>PointService: Deduct points
            Service->>Repo: Create point history
            Service->>Repo: Save bet
            Service-->>Controller: Success
        end
    else Free Bet
        Service->>Repo: Save bet
        Service-->>Controller: Success
    end
    deactivate Service
    deactivate Controller
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • 주의 사항:
    • 유효성 검증 로직의 이중성 확인: UserBetRequest의 @AssertTrue 메서드와 BettingService의 서비스 레벨 검증이 일관되게 작동하는지 검증 필요
    • 무료 베팅(free=true)과 유료 베팅 케이스의 경계 조건 테스트 확인
    • 기존 ErrorCode enum 구조 변경으로 인한 다른 enum 상수의 호환성 확인

Possibly related PRs

Suggested reviewers

  • msciki7
  • gxuoo

Poem

🐰 스케줄링을 켜고 검증을 재정렬,
베팅의 포인트는 이제 더욱 맑음!
무료든 유료든 조건을 확인하고,
오류 코드도 늘어나니 다섯 마리 토끼 모두 행복! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title Check ❓ Inconclusive PR 제목 "[BE] SISC1-52 [FIX] 베팅 게임 버그 수정"은 베팅 게임 관련 변경사항과 관련이 있지만, 구체적인 수정 내용을 설명하지 않는 매우 포괄적이고 모호한 표현입니다. "버그 수정"이라는 용어는 실제 변경사항(스테이크 포인트 검증 로직 개선, 에러 코드 추가, 일정 예약 지원 추가)의 구체적인 내용을 전달하지 않습니다. 팀원이 커밋 이력을 훑어볼 때 이 제목만으로는 어떤 구체적인 개선이 이루어졌는지 파악하기 어렵습니다. PR 제목을 더 구체적이고 설명적으로 변경하기를 권장합니다. 예를 들어 "베팅 포인트 검증 로직 개선 및 에러 처리 개선" 또는 "조건부 스테이크 포인트 검증 로직 추가"와 같이 실제 변경사항의 핵심 내용을 반영하는 제목이 더 명확합니다.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch SISC1-52-BE-주식-베팅-게임-구현

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
backend/src/main/java/org/sejongisc/backend/betting/dto/UserBetRequest.java (1)

5-5: 사용하지 않는 import를 제거해주세요.

@Min 어노테이션이 제거되었으므로 jakarta.validation.constraints.Min import도 더 이상 필요하지 않습니다.

다음 diff를 적용하여 미사용 import를 제거하세요:

-import jakarta.validation.constraints.Min;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 561a240 and d35042b.

📒 Files selected for processing (4)
  • backend/src/main/java/org/sejongisc/backend/BackendApplication.java (1 hunks)
  • backend/src/main/java/org/sejongisc/backend/betting/dto/UserBetRequest.java (2 hunks)
  • backend/src/main/java/org/sejongisc/backend/betting/service/BettingService.java (1 hunks)
  • backend/src/main/java/org/sejongisc/backend/common/exception/ErrorCode.java (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
backend/src/main/java/org/sejongisc/backend/betting/service/BettingService.java (3)
backend/src/test/java/org/sejongisc/backend/betting/service/BettingServiceTest.java (5)
  • freeReq (315-322)
  • paidReq (306-313)
  • Test (369-379)
  • Test (440-453)
  • BettingServiceTest (30-480)
backend/src/test/java/org/sejongisc/backend/betting/service/BettingServiceTransactionalTest.java (1)
  • Test (48-79)
backend/src/main/java/org/sejongisc/backend/betting/entity/UserBet.java (1)
  • Entity (12-54)
🔇 Additional comments (3)
backend/src/main/java/org/sejongisc/backend/common/exception/ErrorCode.java (1)

68-69: 새로운 에러 코드 추가가 적절합니다.

enum 구문이 올바르게 수정되었고, BET_POINT_TOO_LOW 에러 코드가 명확한 메시지와 함께 추가되었습니다. CONFLICT 상태는 비즈니스 규칙 위반에 적합합니다.

backend/src/main/java/org/sejongisc/backend/betting/dto/UserBetRequest.java (1)

30-33: 검증 로직이 비즈니스 요구사항을 올바르게 반영합니다.

커스텀 검증 메서드가 무료 베팅과 유료 베팅을 적절히 구분하여 처리합니다. null 체크도 포함되어 있어 안전합니다.

backend/src/main/java/org/sejongisc/backend/BackendApplication.java (1)

7-9: @EnableScheduling은 베팅 스케줄러에 필요합니다.

검증 결과, BettingScheduler.java에 4개의 @Scheduled 메서드가 존재합니다:

  • dailyOpenScheduler() / weeklyOpenScheduler(): 베팅 라운드 생성 (매일 9시, 월요일 9시)
  • dailyCloseScheduler() / weeklyCloseScheduler(): 베팅 라운드 종료 (평일 22시, 금요일 22시)

@EnableScheduling 어노테이션은 이러한 스케줄된 작업들이 실제로 동작하기 위해 필수입니다. 따라서 이 추가는 베팅 시스템의 핵심 기능과 직접 관련이 있으며, 정당합니다.

Likely an incorrect or invalid review comment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants