Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] 여행 후기(TripRecord)의 평점(averageRating) 계산 로직 추가 #146

Merged
merged 5 commits into from
Feb 7, 2024

Conversation

meena2003
Copy link
Member

🎯 목적

  • 새 기능 (New Feature)

  • 여행 후기 리뷰(TripRecordReview) 별점 등록 및 수정 시, 여행 후기 평점이 계산되는 로직을 추가했습니다.


🛠 작성/변경 사항

- 새로운 여행 후기 리뷰 별점을 등록할 때, 참조하는 여행 후기(TripRecord)의 평점이 계산됩니다.

  • TripRecordReviewServicesaveRatingScore() 메소드에서 tripRecord가 가진 calculateAverageRating() 메소드를 호출합니다.
  • TripRecord 엔티티가 가진 OneToMany 연관관계의 TripRecordReviews 리스트의 크기를 이용해 평균을 구합니다.
      public void calculateAverageRating(double ratingScore) {
            if (tripRecordReviews.isEmpty()) {
                averageRating = ratingScore;
            } else {
                double totalRating = averageRating * tripRecordReviews.size();
                totalRating += ratingScore;
                averageRating = totalRating / (tripRecordReviews.size() + 1);
            }
        }
    • 새롭게 별점이 등록될 때 호출되기 때문에 마지막 +1을 더한 값으로 나누어 평균을 구합니다.

- 여행 후기 리뷰의 별점을 수정할 때, 참조하는 여행 후기(TripRecord)의 평점이 수정됩니다.

  • 새롭게 등록하는 것과 달리 tripRecord가 가진 updateAverageRating() 메소드를 호출합니다.
  • 해당 메소드는 두 개의 매개변수를 가집니다.
    • double newRatingScore
    • TripRecordReview tripRecordReview
        public void updateAverageRating(double newRatingScore, TripRecordReview tripRecordReview) {
            double totalRating = averageRating * tripRecordReviews.size();
            double previousRatingScore = tripRecordReview.getRatingScore();
        
            totalRating -= previousRatingScore;
            totalRating += newRatingScore;
        
            averageRating = totalRating / tripRecordReviews.size();
        }
    • 이전 점수를 뺀 뒤 수정하려는 새로운 값으로 평균을 구해야 하기 때문에 tripRecordReview 객체를 이용합니다.

🔗 관련 이슈


💡 특이 사항

- 별점 수정 시 평점을 구하는 방법을 고민했습니다.

  • 이전 점수를 이용하지 않고선 제대로된 평균을 다시 구하기 어렵다고 판단했습니다.
  • TripRecord 엔티티가 가지고 있는 TriprecordReviews 리스트를 통해 이전 별점 값을 구하고자 했지만, List에서 인덱스를 통해 값을 찾는데 한계가 있다고 생각했습니다.
  • 따라서 아예 외부에서 과거 엔티티를 매개변수로 받아 previousReatingScore를 구했습니다.

@meena2003 meena2003 added enhancement New feature or request feat 기능을 추가합니다. labels Feb 6, 2024
@meena2003 meena2003 self-assigned this Feb 6, 2024
Copy link

github-actions bot commented Feb 6, 2024

Test Results

0 tests  ±0   0 ✅ ±0   0s ⏱️ ±0s
0 suites ±0   0 💤 ±0 
0 files   ±0   0 ❌ ±0 

Results for commit e48a6af. ± Comparison against base commit 06382e7.

@meena2003 meena2003 merged commit 72a2734 into develop Feb 7, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request feat 기능을 추가합니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feat] 여행 후기(TripRecord) 평점(averageRating) 구하는 로직 추가
1 participant