Skip to content

[DP-311] 포인트/배지 즉시 미반영 버그 수정#124

Merged
nYeonG4001 merged 2 commits intodevelopV2from
auto/fix/DP-311-point-badge-reflect
Apr 12, 2026
Merged

[DP-311] 포인트/배지 즉시 미반영 버그 수정#124
nYeonG4001 merged 2 commits intodevelopV2from
auto/fix/DP-311-point-badge-reflect

Conversation

@nYeonG4001
Copy link
Copy Markdown
Collaborator

연관 티켓

DP-311

문제

포인트 적립 후 /users/me/points, /users/me/badges 조회 시 변경사항이 즉시 반영되지 않는 현상

원인 분석

1. totalPoints DB 미반영

PointService.earn() 내부에서 user.addPoints() 호출 후 userRepository.save(user)가 없어, 호출자가 detached/proxy 엔티티를 넘긴 경우 JPA dirty checking이 작동하지 않아 users.total_points가 DB에 저장되지 않음

영향 케이스:

  • AnswerService.adoptAnswer()answer.getUser() lazy proxy 전달
  • 향후 트랜잭션 경계 밖에서 earn() 호출 시 동일 문제 재현 가능

2. STREAK_7 배지 즉시 unlock 누락

checkAndUnlock()REQUIRES_NEW 트랜잭션으로 실행되어 외부 트랜잭션의 미커밋 DAILY_LOGIN PointLog를 DB에서 조회할 수 없음
→ 7일 연속 로그인 직후 STREAK_7 배지가 unlock되지 않고 다음 로그인 시 unlock되는 문제

수정 내용

파일 변경 내용
PointService.java earn()userRepository.save(user) 추가
BadgeService.java checkAndUnlock(user, justEarned) 파라미터 추가, calculateStreak()에서 DAILY_LOGIN 적립 시 오늘 날짜 직접 포함
BadgeServiceTest.java 변경된 시그니처에 맞게 테스트 수정
PointServiceTest.java 변경된 시그니처에 맞게 테스트 수정

테스트

  • BadgeServiceTest 전체 통과
  • PointServiceTest 전체 통과
  • ./gradlew build 성공

- earn()에 userRepository.save(user) 추가: detached/proxy 엔티티 상태와 무관하게 totalPoints를 DB에 즉시 반영
- checkAndUnlock()에 justEarned 파라미터 추가: REQUIRES_NEW 트랜잭션에서 미커밋 DAILY_LOGIN 로그를 볼 수 없는 문제 해결
- calculateStreak()에서 DAILY_LOGIN 적립 시 오늘 날짜를 직접 포함해 STREAK_7 배지 즉시 unlock
- DAILY_LOGIN 7일 연속 시 STREAK_7 unlock 테스트 추가
- DAILY_LOGIN 연속 일수 부족 시 unlock 안 함 테스트 추가
@sonarqubecloud
Copy link
Copy Markdown

@nYeonG4001 nYeonG4001 merged commit e1e0e20 into developV2 Apr 12, 2026
3 checks passed
@nYeonG4001 nYeonG4001 deleted the auto/fix/DP-311-point-badge-reflect branch April 12, 2026 13:07
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.

1 participant