Skip to content

[✨Feat] 키워드 분석 시작 API 구현#57

Merged
yong203 merged 1 commit into
devfrom
feat/#56
Jul 4, 2026
Merged

[✨Feat] 키워드 분석 시작 API 구현#57
yong203 merged 1 commit into
devfrom
feat/#56

Conversation

@yong203

@yong203 yong203 commented Jul 4, 2026

Copy link
Copy Markdown
Member

작업 내용

  • POST /cover-letters/{coverLetterId}/keyword-analysis 키워드 분석 시작/재분석 API를 추가했습니다.
  • keywordanalysis 기능 패키지를 추가하고 KeywordAnalysis persistence, repository, service, controller, DTO를 구현했습니다.
  • 키워드 분석 시작 시 KeywordAnalysis(PROCESSING)LlmJob(KEYWORD_ANALYSIS, PENDING)을 생성합니다.
  • 기존 KeywordAnalysis가 있으면 새 리소스를 만들지 않고 같은 id를 재사용해 PROCESSING으로 전환합니다.
  • sourceReviewVersionId가 없으면 CoverLetter.latestReviewVersionId를 기준으로 분석을 시작합니다.
  • 다른 사용자 소유, 삭제된 자기소개서, REVIEWED가 아닌 자기소개서, 다른 자기소개서의 첨삭 버전은 거부합니다.
  • 같은 자기소개서에 진행 중인 LLM Job이 있으면 LLM_JOB_ALREADY_RUNNING을 반환합니다.
  • 키워드 분석 정책을 “재첨삭 완료만으로 삭제하지 않고, 사용자가 재분석할 때 최신 버전 기준으로 갱신”으로 문서 정리했습니다.
  • API 상태, 요구사항, ERD, decision, 진행 상태 문서를 갱신했습니다.

관련 이슈

문서 반영

  • 반영한 문서:
    • docs/api/README.md
    • docs/api/common.md
    • docs/api/keyword-analysis.md
    • docs/api/review-versions.md
    • docs/decisions/README.md
    • docs/decisions/keyword-analysis.md
    • docs/erd.md
    • docs/requirements.md
    • docs/status.md

확인 결과

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

Summary by CodeRabbit

  • New Features

    • 커버레터에 대한 키워드 분석을 시작하는 API가 추가되었습니다.
    • 최신 첨삭 기준으로 키워드 분석을 다시 실행할 수 있게 되었습니다.
  • Bug Fixes

    • 재첨삭이 완료되어도 기존 키워드 분석 결과가 자동으로 사라지지 않도록 변경되었습니다.
    • 재분석 시 기존 분석 항목을 유지한 채 최신 첨삭 버전 기준으로 갱신됩니다.
  • Documentation

    • 키워드 분석 관련 API 상태, 동작 규칙, 요구사항 문서를 최신 동작에 맞게 정리했습니다.

@yong203 yong203 linked an issue Jul 4, 2026 that may be closed by this pull request
7 tasks
@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

키워드 분석 결과를 재첨삭 완료 시 삭제하지 않고 유지하도록 관련 문서(API, Decision, ERD, 요구사항, 상태)를 갱신했다. KeywordAnalysis 도메인(entity, repository, service, controller, DTO)을 신규 추가하고, LlmJobpendingKeywordAnalysis 팩토리를 추가해 POST /cover-letters/{coverLetterId}/keyword-analysis API를 구현했으며 각 계층의 테스트를 작성했다.

Changes

정책 문서 갱신

Layer / File(s) Summary
키워드 분석 결과 유지 정책 문서화
docs/api/README.md, docs/api/common.md, docs/api/keyword-analysis.md, docs/api/review-versions.md, docs/decisions/README.md, docs/decisions/keyword-analysis.md, docs/erd.md, docs/requirements.md, docs/status.md
API-020 상태를 Implemented로 변경하고, 재첨삭 완료만으로 키워드 분석 결과를 삭제하지 않으며 사용자가 재분석 실행 시 갱신하도록 문서 전반과 Decision 028/029, ERD, REQ-009, status 로드맵을 수정함.

키워드 분석 시작 API 구현

Layer / File(s) Summary
KeywordAnalysis 엔티티/상태/리포지토리
.../entity/KeywordAnalysis.java, .../entity/KeywordAnalysisStatus.java, .../repository/KeywordAnalysisRepository.java, .../repository/KeywordAnalysisRepositoryTest.java
processing/restart 팩토리를 가진 JPA 엔티티, PROCESSING/COMPLETED/FAILED 상태 enum, findByCoverLetterId 리포지토리 및 라운드트립 테스트를 추가함.
LlmJob 키워드 분석 잡 생성 헬퍼
.../llmjob/entity/LlmJob.java, .../llmjob/repository/LlmJobRepositoryTest.java
KEYWORD_ANALYSIS 타입·PENDING 상태 잡을 생성하는 pendingKeywordAnalysis 정적 팩토리와 라운드트립 테스트를 추가함.
KeywordAnalysisService 시작/재분석 로직
.../service/KeywordAnalysisService.java, .../service/StartKeywordAnalysisResult.java, .../service/KeywordAnalysisServiceTest.java
커버레터 상태/리뷰버전 검증, 실행 중 잡 중복 방지, 기존 결과 재사용/신규 생성, LlmJob 발행 및 이벤트 퍼블리시 로직을 구현하고 통합 테스트를 작성함.
KeywordAnalysisController 및 요청/응답 DTO
.../controller/KeywordAnalysisController.java, .../dto/StartKeywordAnalysisRequest.java, .../dto/StartKeywordAnalysisResponse.java, .../controller/KeywordAnalysisControllerTest.java
POST 엔드포인트, null 허용 요청 DTO, 응답 매핑 DTO를 추가하고 정상/에러(NOT_FOUND, LLM_JOB_ALREADY_RUNNING) 케이스 테스트를 작성함.

Possibly related PRs

  • Rewrite-Team/Rewrite-BE#39: LlmJob 엔티티/상태 조회 스켈레톤을 구현하여 이번 PR의 pendingKeywordAnalysis 추가와 동일한 LLM Job 영속성 계층을 공유함.
  • Rewrite-Team/Rewrite-BE#43: LlmJob 상태 전환(startProcessing 등)을 추가하여 이번 PR의 잡 생성 로직과 동일한 잡 생명주기 코드에 연결됨.
  • Rewrite-Team/Rewrite-BE#55: LlmJobrequestInstruction 저장을 추가하여 이번 PR의 pendingKeywordAnalysis 생성 로직과 같은 엔티티/생성 흐름을 다룸.

Suggested labels: ✨ Feature

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 키워드 분석 시작 API 구현이라는 मुख्य 변경을 정확하고 간결하게 요약합니다.
Description check ✅ Passed 작업 내용, 관련 이슈, 문서 반영, 확인 결과가 템플릿에 맞게 모두 채워져 있습니다.
Linked Issues check ✅ Passed API-020의 시작/재분석 흐름, 상태 전이, 검증, 응답 계약, 문서 갱신 요구를 전반적으로 충족합니다.
Out of Scope Changes check ✅ Passed 요구된 범위인 API, 도메인, 테스트, 문서 수정만 포함되어 보이며 명확한 이탈 변경은 보이지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

@yong203 yong203 marked this pull request as ready for review July 4, 2026 05:10
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown

Backend CI Report

Item Result
Tests ✅ Passed
JaCoCo line coverage 95.62% (1071/1120 lines)
Coverage report ✅ Generated
Codecov upload ✅ Uploaded

View workflow run | View coverage details

@codecov

codecov Bot commented Jul 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.45455% with 3 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...eywordanalysis/service/KeywordAnalysisService.java 94.73% 0 Missing and 2 partials ⚠️
...analysis/controller/KeywordAnalysisController.java 66.66% 0 Missing and 1 partial ⚠️

📢 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.

Actionable comments posted: 1

🤖 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.

Inline comments:
In
`@src/main/java/com/daon/rewrite/keywordanalysis/controller/KeywordAnalysisController.java`:
- Around line 12-30: The KeywordAnalysisController endpoint is missing OpenAPI
documentation, so add the same annotation pattern used by other controller
classes. Update startKeywordAnalysis in KeywordAnalysisController with
`@Operation` and the appropriate `@ApiResponse` entries to document the real
behavior of the POST /cover-letters/{coverLetterId}/keyword-analysis flow,
including success plus expected error cases like 404 and 409. Make sure the
documented request/response DTOs and status codes match what
keywordAnalysisService.startMyKeywordAnalysis actually returns and throws, and
follow the existing controller OpenAPI style in the project.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 26c1e0a3-4503-4f68-9bb5-7253af999bb8

📥 Commits

Reviewing files that changed from the base of the PR and between 6a45b12 and 1df9cb4.

📒 Files selected for processing (22)
  • docs/api/README.md
  • docs/api/common.md
  • docs/api/keyword-analysis.md
  • docs/api/review-versions.md
  • docs/decisions/README.md
  • docs/decisions/keyword-analysis.md
  • docs/erd.md
  • docs/requirements.md
  • docs/status.md
  • src/main/java/com/daon/rewrite/keywordanalysis/controller/KeywordAnalysisController.java
  • src/main/java/com/daon/rewrite/keywordanalysis/dto/StartKeywordAnalysisRequest.java
  • src/main/java/com/daon/rewrite/keywordanalysis/dto/StartKeywordAnalysisResponse.java
  • src/main/java/com/daon/rewrite/keywordanalysis/entity/KeywordAnalysis.java
  • src/main/java/com/daon/rewrite/keywordanalysis/entity/KeywordAnalysisStatus.java
  • src/main/java/com/daon/rewrite/keywordanalysis/repository/KeywordAnalysisRepository.java
  • src/main/java/com/daon/rewrite/keywordanalysis/service/KeywordAnalysisService.java
  • src/main/java/com/daon/rewrite/keywordanalysis/service/StartKeywordAnalysisResult.java
  • src/main/java/com/daon/rewrite/llmjob/entity/LlmJob.java
  • src/test/java/com/daon/rewrite/keywordanalysis/controller/KeywordAnalysisControllerTest.java
  • src/test/java/com/daon/rewrite/keywordanalysis/repository/KeywordAnalysisRepositoryTest.java
  • src/test/java/com/daon/rewrite/keywordanalysis/service/KeywordAnalysisServiceTest.java
  • src/test/java/com/daon/rewrite/llmjob/repository/LlmJobRepositoryTest.java

@yong203 yong203 self-assigned this Jul 4, 2026
@yong203 yong203 added the ✨ Feature 새로운 기능 구현 label Jul 4, 2026
@yong203 yong203 merged commit ff3cb79 into dev Jul 4, 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