Skip to content

feat: 코스별 완주 기록 랭킹 API 추가 (Kotlin) - #248

Merged
unam98 merged 2 commits into
mainfrom
feature/course-record-ranking
Aug 17, 2026
Merged

feat: 코스별 완주 기록 랭킹 API 추가 (Kotlin)#248
unam98 merged 2 commits into
mainfrom
feature/course-record-ranking

Conversation

@unam98

@unam98 unam98 commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

작업 배경

  • 코스 상세 화면에 코스별 완주 기록 랭킹 섹션을 추가하기 위한 백엔드 작업
  • Kotlin 첫 도입 (kotlin-jvm/spring/lombok 플러그인 추가)

변경 사항

영역 내용
build.gradle Kotlin 툴체인 추가 (kotlin-jvm, kotlin-spring, kotlin-lombok, jackson-module-kotlin, mockito-kotlin)
ranking/service/RecordRankingService.kt Redis ZADD LT CH로 코스별 개인 최고기록만 원자적 갱신
ranking/controller/RecordRankingController.kt GET /api/course/{courseId}/ranking, /ranking/me
RecordService.createRecord DB 트랜잭션 커밋 후에만 랭킹 갱신 훅 실행 (TransactionSynchronizationManager.afterCommit)

영향 범위

  • 신규 엔드포인트 추가, 기존 API 응답 스키마 변경 없음
  • RecordService.createRecord에 훅 1곳 추가 (publicCourseId 있을 때만 동작)

검증 매트릭스

영향 범위 테스트 코드
개인 최고기록만 원자적으로 갱신 (LT+CH) 기존 기록보다 빠르면 hash 인덱스에 recordId가 갱신된다
더 느린 기록은 무시 기존 기록보다 느리면 hash 인덱스를 건드리지 않는다
랭킹 목록 조회 (순위/조인) getRanking은 점수 오름차순 순서대로 순위를 매기고 recordId로 상세 정보를 조인한다
내 순위 조회 (0-based→1-based) getMyRanking은 0-based rank를 1-based로 변환해서 반환한다
기록 없는 유저 (hasRecord=false) 랭킹에 없는 유저면 getMyRanking은 hasRecord=false를 반환한다
createRecord 훅 연결 퍼블릭코스아이디로_정상_생성

Test Plan

  • ./gradlew test 전체 통과
  • 로컬 서버 기동 후 curl로 랭킹 응답 확인
  • dev 배포 후 안드로이드 앱에서 실제 화면 확인 (진행 중)

🤖 Generated with Claude Code

Redis Sorted Set + ZADD LT CH로 동시 완주 기록 중 개인 최고기록만
원자적으로 갱신. GET /api/course/{courseId}/ranking, /ranking/me 추가.
DB 커밋 이후에만 랭킹을 갱신하도록 TransactionSynchronizationManager 사용.
@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review available on request

  • 🔍 Trigger review

Reviews should be triggered manually for repositories with fewer than 10 stars. Select Trigger review above or comment @coderabbitai review to review the latest changes. For a full review, comment @coderabbitai full review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 46e1caa9-f747-4faa-8f90-c6e8eb6b93a9


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.

@unam98
unam98 merged commit 4d88152 into main Aug 17, 2026
2 checks passed
@unam98
unam98 deleted the feature/course-record-ranking branch August 17, 2026 09:49
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