Skip to content

[✨Feat] 첨삭 버전 조회 API 구현#51

Merged
yong203 merged 1 commit into
devfrom
feat/#50
Jun 30, 2026
Merged

[✨Feat] 첨삭 버전 조회 API 구현#51
yong203 merged 1 commit into
devfrom
feat/#50

Conversation

@yong203

@yong203 yong203 commented Jun 30, 2026

Copy link
Copy Markdown
Member

작업 내용

  • 첨삭 버전 목록 조회 API(API-017)를 추가합니다.
  • 첨삭 버전 상세 조회 API(API-018)를 추가합니다.
  • 현재 사용자 소유/soft delete 기준으로 자기소개서 접근을 검증합니다.
  • 최신 버전 여부를 CoverLetter.latestReviewVersionId 기준으로 계산합니다.
  • 문항별 첨삭 결과를 questionOrder 오름차순으로 반환합니다.
  • repository/service/controller 테스트를 추가하고 API/status 문서를 갱신합니다.

관련 이슈

문서 반영

  • 반영한 문서:
    • docs/api/README.md
    • docs/status.md

확인 결과

  • ./gradlew test
  • ./gradlew check
  • 기타: git diff --check
  • 실행하지 못함. 이유:

Summary by CodeRabbit

  • New Features

    • 커버레터별 리뷰 버전 목록과 상세 조회 기능이 추가되었습니다.
    • 최신 버전 여부와 작성 시각, 질문별 결과까지 함께 확인할 수 있습니다.
  • Bug Fixes

    • 존재하지 않거나 접근 권한이 없는 커버레터/버전에 대해 일관된 404 응답을 반환하도록 개선되었습니다.
    • 리뷰 버전 목록은 최신순으로 정렬되어 표시됩니다.
  • Documentation

    • API 구현 상태와 후속 작업 범위 안내가 최신화되었습니다.
  • Tests

    • 목록 조회, 상세 조회, 예외 처리에 대한 검증이 추가되었습니다.

첨삭 버전 목록과 상세 조회 API를 추가하고 현재 사용자 소유 검증, 최신 버전 판정, 문항별 결과 응답을 처리한다.
@yong203 yong203 linked an issue Jun 30, 2026 that may be closed by this pull request
7 tasks
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ReviewVersion 목록 및 상세 조회를 위한 ReviewVersionQueryService, 레포지토리 쿼리 메서드 2개, 서비스 내부 레코드(ReviewVersionSummary, ReviewVersionDetail), 응답 DTO 4종, ReviewVersionController가 신규 추가되었다. 레포지토리·서비스·컨트롤러 테스트가 함께 추가되고, API/status 문서가 갱신되었다.

Changes

ReviewVersion 목록/상세 조회 API 구현

Layer / File(s) Summary
레포지토리 쿼리 메서드 및 서비스 내부 레코드 타입
src/main/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepository.java, src/main/java/com/daon/rewrite/reviewversion/service/ReviewVersionSummary.java, src/main/java/com/daon/rewrite/reviewversion/service/ReviewVersionDetail.java
ReviewVersionRepositorycoverLetterId 정렬 목록 조회 및 id+coverLetterId 단건 조회 메서드가 선언되고, 서비스 계층에서 사용하는 ReviewVersionSummary(버전+최신 여부)와 ReviewVersionDetail(버전+문항 결과 목록) 레코드가 정의된다.
ReviewVersionQueryService 구현
src/main/java/com/daon/rewrite/reviewversion/service/ReviewVersionQueryService.java
findMyReviewVersions는 현재 사용자 소유의 활성 커버레터를 검증한 뒤 버전 목록을 생성일 내림차순으로 조회해 isLatest 플래그와 함께 반환한다. findMyReviewVersion은 버전+커버레터 복합 조건으로 단건 조회하고 없으면 BusinessException(NOT_FOUND)을 던지며, 질문 오름차순 정렬된 ReviewVersionQuestionResult 목록을 포함한 ReviewVersionDetail을 반환한다.
응답 DTO 레코드
src/main/java/com/daon/rewrite/reviewversion/dto/ReviewVersionListResponse.java, .../ReviewVersionListItemResponse.java, .../ReviewVersionDetailResponse.java, .../ReviewVersionQuestionResultResponse.java
4종의 응답 레코드가 추가되며, 각 from() 팩토리에서 서비스 레코드 값을 Asia/Seoul 기준 LocalDateTime으로 변환해 API 응답 형태로 매핑한다.
ReviewVersionController REST 엔드포인트
src/main/java/com/daon/rewrite/reviewversion/controller/ReviewVersionController.java
GET /cover-letters/{coverLetterId}/review-versionsGET /cover-letters/{coverLetterId}/review-versions/{versionId} 엔드포인트가 추가되어 서비스 결과를 각 응답 DTO로 변환해 반환한다.
레포지토리·서비스·컨트롤러 테스트
src/test/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepositoryTest.java, .../service/ReviewVersionQueryServiceTest.java, .../controller/ReviewVersionControllerTest.java
레포지토리 정렬/복합 조건 조회, 서비스 통합 테스트(목록·상세·NOT_FOUND), WebMvcTest 기반 JSON 응답 필드 및 404 에러 응답 검증이 포함된다.
API 및 status 문서 갱신
docs/api/README.md, docs/status.md
API-017, API-018 상태가 Planned에서 Implemented로 변경되고, REQ-006 검증 근거가 보강되며 Next Issue Slice Candidates가 갱신된다.

Possibly related PRs

  • Rewrite-Team/Rewrite-BE#43: ReviewVersionReviewVersionQuestionResult 엔티티와 레포지토리가 이 PR에서 도입되었으며, 본 PR의 조회 로직이 해당 저장 모델을 직접 기반으로 한다.

Suggested labels

✨ Feature

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
Title check ✅ Passed 제목이 첨삭 버전 조회 API 구현이라는 핵심 변경을 정확히 요약합니다.
Description check ✅ Passed 요구된 작업/이슈/문서/확인 결과 섹션이 모두 채워져 있어 템플릿을 충분히 따릅니다.
Linked Issues check ✅ Passed 목록·상세 조회, 권한/NOT_FOUND, 정렬, 최신판 계산, 문서·테스트까지 이슈 #50의 요구를 충족합니다.
Out of Scope Changes check ✅ Passed 요약된 변경에는 목록·상세 조회와 관련 문서/테스트만 보이며, 이슈 범위를 벗어난 기능 추가는 보이지 않습니다.

Comment @coderabbitai help to get the list of available commands.

@yong203 yong203 self-assigned this Jun 30, 2026
@yong203 yong203 added the ✨ Feature 새로운 기능 구현 label Jun 30, 2026
@github-actions

Copy link
Copy Markdown

Backend CI Report

Item Result
Tests ✅ Passed
JaCoCo line coverage 96.65% (751/777 lines)
Coverage report ✅ Generated
Codecov upload ✅ Uploaded

View workflow run | View coverage details

@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/test/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepositoryTest.java (1)

102-108: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

version 필드를 리플렉션으로 강제 변경하는 의도를 명확히 하면 좋겠습니다.

ReviewVersion.first(...)로 만든 newVersionversionReflectionTestUtils.setFieldv0.2로 덮어쓰고 있는데, 이 테스트는 createdAt 내림차순 정렬만 검증하므로 version 값 자체는 단언에 사용되지 않습니다. (coverLetter, version) 유니크 제약 회피 등 도메인 제약 때문이라면 짧은 주석을 남기거나, 도메인에 다음 버전 생성용 팩토리가 있다면 그쪽을 사용하는 편이 내부 상태 의존을 줄여 더 견고합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/test/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepositoryTest.java`
around lines 102 - 108, The test in ReviewVersionRepositoryTest is mutating the
ReviewVersion.version field via ReflectionTestUtils without making the reason
explicit. Clarify the intent by either switching to an existing next-version
factory or adding a short inline comment near ReviewVersion.first(...) /
ReflectionTestUtils.setField(...) explaining that the override is only to
satisfy the domain constraint (for example, the coverLetter/version uniqueness)
and is not part of the assertion, so the test remains readable and less
dependent on internal state.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@src/test/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepositoryTest.java`:
- Around line 102-108: The test in ReviewVersionRepositoryTest is mutating the
ReviewVersion.version field via ReflectionTestUtils without making the reason
explicit. Clarify the intent by either switching to an existing next-version
factory or adding a short inline comment near ReviewVersion.first(...) /
ReflectionTestUtils.setField(...) explaining that the override is only to
satisfy the domain constraint (for example, the coverLetter/version uniqueness)
and is not part of the assertion, so the test remains readable and less
dependent on internal state.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: af47036d-213b-45d7-9ee0-092f6a1e36e6

📥 Commits

Reviewing files that changed from the base of the PR and between 559088c and 337ca00.

📒 Files selected for processing (14)
  • docs/api/README.md
  • docs/status.md
  • src/main/java/com/daon/rewrite/reviewversion/controller/ReviewVersionController.java
  • src/main/java/com/daon/rewrite/reviewversion/dto/ReviewVersionDetailResponse.java
  • src/main/java/com/daon/rewrite/reviewversion/dto/ReviewVersionListItemResponse.java
  • src/main/java/com/daon/rewrite/reviewversion/dto/ReviewVersionListResponse.java
  • src/main/java/com/daon/rewrite/reviewversion/dto/ReviewVersionQuestionResultResponse.java
  • src/main/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepository.java
  • src/main/java/com/daon/rewrite/reviewversion/service/ReviewVersionDetail.java
  • src/main/java/com/daon/rewrite/reviewversion/service/ReviewVersionQueryService.java
  • src/main/java/com/daon/rewrite/reviewversion/service/ReviewVersionSummary.java
  • src/test/java/com/daon/rewrite/reviewversion/controller/ReviewVersionControllerTest.java
  • src/test/java/com/daon/rewrite/reviewversion/repository/ReviewVersionRepositoryTest.java
  • src/test/java/com/daon/rewrite/reviewversion/service/ReviewVersionQueryServiceTest.java

@yong203 yong203 merged commit df48fdc into dev Jun 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 새로운 기능 구현

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[✨Feat] 첨삭 버전 목록 및 상세 조회 API 구현

1 participant