♻️ 코드 리팩토링 : 퀴즈 점수 및 랭킹 기능 추가와 관련 예외 처리 및 버그 수정#212
Merged
rowing0328 merged 12 commits intomainfrom Feb 17, 2025
Merged
Conversation
- 사용자의 정답 여부에 따라 점수를 부여하는 기능 추가 - QuizScore 엔티티를 활용하여 사용자 점수 저장 및 갱신 - 퀴즈 난이도(EASY, MEDIUM, HARD)에 따라 점수 차등 부여 - 기존 정답 체크 로직을 유지하면서 점수 기능 연동 - 점수 계산 로직을 별도 메서드로 분리하여 가독성 및 유지보수성 향상 Ref : #211
- NOT_FOUND_DIFFICULTY(난이도 없음) 예외 코드 추가 - QUIZ_PROCESSING_ERROR(퀴즈 처리 중 문제 발생) 예외 코드 추가 - NOT_FOUND_QUIZ_SCORE(퀴즈 점수 없음) 예외 코드 추가 - NOT_FOUND_QUIZ_SCORE_RANKING(퀴즈 랭킹 없음) 예외 코드 추가 Ref : #211
- 퀴즈 점수를 조회하는 `/score` 엔드포인트 추가 - 퀴즈 랭킹을 조회하는 `/rankings` 엔드포인트 추가 (상위 6명) Ref : #211
- 사용자의 랭킹 정보를 저장하는 QuizRanking 클래스 구현 - 랭킹, 사용자 닉네임, 점수를 필드로 포함 - 사용자 이름이 null일 경우 예외 처리 추가 (QUIZ_PROCESSING_ERROR) - QuizScore 엔티티를 기반으로 랭킹 객체를 생성하는 정적 팩토리 메서드 추가 Ref : #211
- QuizRankingResponse 리스트를 불변 객체로 감싸는 클래스 구현 - 외부에서 리스트를 수정할 수 없도록 unmodifiableList 적용 - 정적 팩토리 메서드 `of()` 추가하여 객체 생성 방식 통일 Ref : #211
- 사용자의 퀴즈 점수를 조회하는 `findQuizScoreById` 메서드 구현 - 퀴즈 점수를 기준으로 상위 6명의 랭킹을 조회하는 `getTop6Ranking` 메서드 추가 - `QuizScoreRepository` 활용하여 점수 데이터 조회 - 사용자 존재 여부 확인 후 예외 처리 (NOT_FOUND_USER, NOT_FOUND_QUIZ_SCORE) - 랭킹 데이터를 `QuizRanking` 객체로 변환하여 `QuizRankings`로 감싸서 반환 Ref : #211
- `QuizRanking` 객체 리스트를 관리하는 `QuizRankings` 클래스 구현 - 랭킹 목록을 불변 리스트로 설정하여 외부 수정 방지 - 정적 팩토리 메서드 `of()` 추가하여 객체 생성 방식 통일 - `getRankings()` 메서드 제공하여 랭킹 리스트 반환 Ref : #211
- 사용자의 퀴즈 점수를 관리하는 `QuizScore` 엔티티 구현 - `UserEntity`와 `OneToOne` 관계 설정하여 사용자별 점수 관리 - 점수 기본값을 0으로 설정하는 `create()` 정적 팩토리 메서드 추가 - 점수를 증가시키는 `incrementScore()` 메서드 구현 - 사용자 정보가 null일 경우 예외 처리 (QUIZ_PROCESSING_ERROR) Ref : #211
- `QuizScoreRepository` 구현하여 퀴즈 점수 데이터 조회 기능 추가 - 상위 6명의 점수를 조회하는 `findTop6ByOrderByScoreDesc()` 메서드 추가 - `QuizScoreResponse` DTO 추가하여 퀴즈 점수 응답 처리 - 사용자 닉네임과 점수를 포함하는 응답 객체 생성 - `QuizScore` 엔티티를 변환하는 `from()` 정적 메서드 추가 - Swagger 문서화를 위한 `@Schema` 어노테이션 적용 Ref : #211
- @AuthenticationPrincipal 를 통해 사용자 Email를 기준으로 조회할 수 있도록 수정
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
변경 사항
퀴즈 정답 확인 시 점수 시스템 추가
QuizScore엔티티를 사용하여 사용자별 점수 저장 및 갱신퀴즈 및 랭킹 관련 예외 코드 추가
NOT_FOUND_DIFFICULTY: 난이도 없음QUIZ_PROCESSING_ERROR: 퀴즈 처리 중 문제 발생NOT_FOUND_QUIZ_SCORE: 퀴즈 점수 없음NOT_FOUND_QUIZ_SCORE_RANKING: 퀴즈 랭킹 없음퀴즈 점수 및 랭킹 조회 API 추가
/score엔드포인트: 사용자의 퀴즈 점수 조회/rankings엔드포인트: 상위 6명의 퀴즈 랭킹 조회퀴즈 랭킹 관련 엔티티 및 DTO 추가
QuizRanking엔티티: 사용자 랭킹 정보를 저장 (예외 처리 포함)QuizRankingResponses: 불변 리스트로 랭킹 응답 관리 (정적 팩토리 메서드of()제공)QuizRankingResponseDTO: 사용자 순위, 이름, 점수를 포함하며 Swagger의@Schema어노테이션 적용QuizRankings엔티티:QuizRanking리스트 관리, 불변 리스트 및 정적 팩토리 메서드 사용퀴즈 점수 관리 기능 추가
QuizScore엔티티: 사용자와 1:1 관계로 점수를 관리, 기본 값 0,incrementScore()메서드 구현QuizScoreRepository: 상위 6명의 점수를 조회하는findTop6ByOrderByScoreDesc()메서드 추가QuizScoreResponseDTO: 사용자 닉네임과 점수를 포함하는 응답 객체 (from()정적 메서드로 변환 지원)퀴즈 점수 서비스 및 랭킹 조회 기능 추가
findQuizScoreById메서드: 사용자의 점수 조회getTop6Ranking메서드: 상위 6명의 랭킹 조회NOT_FOUND_USER,NOT_FOUND_QUIZ_SCORE)QuizRanking객체로 변환하여QuizRankings에 래핑하여 반환버그 수정
@AuthenticationPrincipal를 통해 사용자 Email 기준으로 올바르게 조회하도록 변경참고 사항