Skip to content

feat: 몰입형 투표 랜덤 다음 조회 API 추가#218

Merged
Junhyukkkk merged 5 commits into
developfrom
feat/immersive-vote-next-random
Jun 3, 2026
Merged

feat: 몰입형 투표 랜덤 다음 조회 API 추가#218
Junhyukkkk merged 5 commits into
developfrom
feat/immersive-vote-next-random

Conversation

@Junhyukkkk

@Junhyukkkk Junhyukkkk commented Jun 3, 2026

Copy link
Copy Markdown
Member

📌 관련 이슈

  • 몰입형 투표 상/하 스와이프 기능

🔍 작업 내용

위로 스와이프 시 랜덤 다음 투표, 아래로 스와이프 시 이전 투표 탐색을 위한 API 추가

📝 변경 사항

  • POST /api/immersive-votes/next 엔드포인트 추가
    • excludeIds 제외하고 랜덤으로 size개 반환
    • 진행 중인 투표만 대상
    • 모든 투표 소진 시 빈 배열 반환 → 클라이언트에서 excludeIds 초기화 후 재요청 (무한 순환)
  • VoteRepository에 랜덤 조회 쿼리 추가
  • imageUrl null 시 thumbnailUrl로 폴백 처리 (기존 투표 이미지 즉시 표시)
  • 폴백 로직 검증 테스트 추가

💬 리뷰어에게

  • 클라이언트에서 excludeIds 히스토리 관리 방식으로 협의 완료
  • Prefetch를 위해 size 파라미터로 여러 개 한번에 반환
  • 기존 ImmersiveFeedItem 구조 그대로 재사용

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 랜덤 투표 추천 기능이 추가되었습니다. 사용자는 이전에 본 투표를 제외하고 새로운 투표를 계속 탐색할 수 있습니다.
  • 개선사항

    • 투표 이미지가 없을 때 썸네일을 자동으로 표시하도록 개선되었습니다.

  - findRandomExcluding: excludeIds 제외하고 랜덤 조회
  - findRandom: 첫 조회용 랜덤 쿼리
  - countOngoing: 진행 중 투표 개수 조회
  - getNextRandom 메서드 시그니처 정의
  - ImmersiveNextResult record 추가
  - excludeIds 제외하고 랜덤 투표 조회
  - 기존 toFeedItem 메서드 재사용
  - imageUrl null 시 thumbnailUrl로 폴백 처리
  - ImmersiveNextRequest: excludeIds, size 파라미터
  - ImmersiveNextResponse: 기존 피드 응답 구조와 동일
  - 무한 순환: 모든 투표 소진 시 빈 배열 반환
  - imageUrl 있으면 그대로 반환
  - imageUrl null이면 thumbnailUrl로 폴백
@Junhyukkkk Junhyukkkk self-assigned this Jun 3, 2026
@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Pull request was closed or merged during review

개요

사용자가 이전 투표를 제외하고 진행 중인 투표를 랜덤하게 조회하는 무한 순환 기능을 추가했습니다. 요청 DTO, 저장소 쿼리, 서비스 구현, REST 엔드포인트를 완성하고, 이미지 URL 폴백 로직을 개선했습니다.

변경사항

Immersive 랜덤 투표 조회

Layer / File(s) 설명
요청/응답 DTO 정의
src/main/java/com/ject/vs/vote/adapter/web/dto/ImmersiveNextRequest.java, src/main/java/com/ject/vs/vote/adapter/web/dto/ImmersiveNextResponse.java
ImmersiveNextRequest는 제외 ID 목록과 크기(기본 10, 범위 1-50)를 받습니다. ImmersiveNextResponse는 투표 항목(ID, 제목, 내용, 이미지, 종료 시각, 옵션, 내 투표, 이모지 요약, 댓글/뷰어 수)을 포함합니다.
저장소 랜덤 조회 메서드
src/main/java/com/ject/vs/vote/domain/VoteRepository.java
findRandom()findRandomExcluding()으로 진행 중인 투표를 랜덤 정렬로 조회하고, countOngoing()으로 진행 중인 투표 개수를 반환합니다. 기존 쿼리 공백도 정리합니다.
서비스 계약 및 결과 타입
src/main/java/com/ject/vs/vote/port/in/ImmersiveVoteQueryUseCase.java
getNextRandom() 메서드를 인터페이스에 선언하고 ImmersiveNextResult 레코드를 도입하여 반환 타입을 정의합니다.
서비스 구현 및 이미지 폴백
src/main/java/com/ject/vs/vote/port/ImmersiveVoteQueryService.java, src/unitTest/java/com/ject/vs/vote/port/ImmersiveVoteQueryServiceTest.java
getNextRandom()을 구현하여 제외 ID 여부에 따라 저장소 메서드를 선택하고, 이미지 URL이 null이면 썸네일 URL로 폴백합니다. 이미지 폴백 동작을 검증하는 2개 테스트를 추가합니다.
REST 엔드포인트 추가
src/main/java/com/ject/vs/vote/adapter/web/ImmersiveVoteController.java
POST /next 엔드포인트 getNextRandom()을 추가하여 요청 DTO, 인증 ID, 익명 식별자를 받아 서비스를 호출하고 응답을 변환합니다.

예상 코드 리뷰 노력

🎯 3 (Moderate) | ⏱️ ~20 분

추천 레이블

✨feature

추천 리뷰어

  • tlarbals824
  • KII1ua

🐰 랜덤으로 투표를 고르는 길,
제외 목록을 남기며 무한히 도는 바퀴,
이미지는 썸네일로 폴백하고,
새로운 기능이 피어나니,
투표 세상이 더욱 생기 넘치네! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 27.78% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 변경사항의 핵심을 명확하게 설명합니다. 몰입형 투표에서 랜덤 다음 조회 API를 추가하는 것이 주요 변경사항이며, 제목이 이를 정확히 반영합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/immersive-vote-next-random

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 and usage tips.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

빌드 성공
배포 준비 완료!

@Junhyukkkk Junhyukkkk merged commit c36e8c7 into develop Jun 3, 2026
4 of 5 checks passed
@Junhyukkkk Junhyukkkk deleted the feat/immersive-vote-next-random branch June 3, 2026 13:55
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