From a3c9a37b3c5c06a23262d89da1b76acfa0f504fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A4=80=ED=98=81?= <127603139+HYH0804@users.noreply.github.com> Date: Wed, 27 May 2026 21:58:33 +0900 Subject: [PATCH] =?UTF-8?q?#250=20[Fix]=20=ED=88=AC=ED=91=9C=20=EB=B9=84?= =?UTF-8?q?=EC=9C=A8=20=EA=B3=84=EC=82=B0=20=EA=B8=B0=EC=A4=80=EC=9D=84=20?= =?UTF-8?q?preVoteOption=EC=97=90=EC=84=9C=20postVoteOption=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95=20(#252)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## #️⃣ 연관된 이슈 - #250 ## 📝 작업 내용 ### ♻️ Refactor | 내용 | 파일 | |------|------| | 불필요한 import 제거 | `UserService.java` | | 투표 비율 계산 기준을 preVoteOption → postVoteOption으로 수정 | `BattleVoteServiceImpl.java` | | totalCount도 사후 투표 완료된 건만 카운트하도록 수정 | `BattleVoteServiceImpl.java` | | countByBattleAndPostVoteOption, countByBattleAndPostVoteOptionIsNotNull 메서드 추가 | `BattleVoteServiceImpl.java` | ## 📌 공유 사항 > ▎ 1. 기존 코드에서 투표 비율(%)이 preVoteOption 기준으로 계산되어 사전 투표만 한 유저도 카운트에 포함되고 있었습니다. ▎ 2. 사후 투표(postVoteOption)가 완료된 건만 기준으로 비율을 계산하도록 수정했습니다. ## ✅ 체크리스트 - [x] Reviewer에 팀원들을 선택했나요? - [x] Assignees에 본인을 선택했나요? - [x] 컨벤션에 맞는 Type을 선택했나요? - [x] Development에 이슈를 연동했나요? - [x] Merge 하려는 브랜치가 올바르게 설정되어 있나요? - [x] 컨벤션을 지키고 있나요? - [x] 로컬에서 실행했을 때 에러가 발생하지 않나요? - [x] 팀원들에게 PR 링크 공유를 했나요? ## 📸 스크린샷 ## 💬 리뷰 요구사항 > 1. Co-authored-by: Claude Sonnet 4.6 --- .../picke/domain/vote/repository/BattleVoteRepository.java | 4 ++++ .../swyp/picke/domain/vote/service/BattleVoteServiceImpl.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/swyp/picke/domain/vote/repository/BattleVoteRepository.java b/src/main/java/com/swyp/picke/domain/vote/repository/BattleVoteRepository.java index 825ddcd4..07bbf0bb 100644 --- a/src/main/java/com/swyp/picke/domain/vote/repository/BattleVoteRepository.java +++ b/src/main/java/com/swyp/picke/domain/vote/repository/BattleVoteRepository.java @@ -27,6 +27,10 @@ public interface BattleVoteRepository extends JpaRepository { long countByBattleAndPreVoteOption(Battle battle, BattleOption preVoteOption); + long countByBattleAndPostVoteOption(Battle battle, BattleOption postVoteOption); + + long countByBattleAndPostVoteOptionIsNotNull(Battle battle); + Optional findTopByBattleOrderByUpdatedAtDesc(Battle battle); @Query("SELECT v FROM BattleVote v JOIN FETCH v.battle JOIN FETCH v.preVoteOption " + diff --git a/src/main/java/com/swyp/picke/domain/vote/service/BattleVoteServiceImpl.java b/src/main/java/com/swyp/picke/domain/vote/service/BattleVoteServiceImpl.java index 6f62f008..1b13289d 100644 --- a/src/main/java/com/swyp/picke/domain/vote/service/BattleVoteServiceImpl.java +++ b/src/main/java/com/swyp/picke/domain/vote/service/BattleVoteServiceImpl.java @@ -75,11 +75,11 @@ public Long findPostVoteOptionId(Long battleId, Long userId) { public VoteStatsResponse getVoteStats(Long battleId) { Battle battle = battleService.findById(battleId); List options = battleOptionRepository.findByBattle(battle); - long totalCount = battleVoteRepository.countByBattle(battle); + long totalCount = battleVoteRepository.countByBattleAndPostVoteOptionIsNotNull(battle); List stats = options.stream() .map(option -> { - long count = battleVoteRepository.countByBattleAndPreVoteOption(battle, option); + long count = battleVoteRepository.countByBattleAndPostVoteOption(battle, option); double ratio = totalCount > 0 ? Math.round((double) count / totalCount * 1000.0) / 10.0 : 0.0;