Skip to content

[✨Feat] 자기소개서 채용 우대사항 저장 API 구현#35

Merged
yong203 merged 1 commit into
devfrom
feat/#34
Jun 18, 2026
Merged

[✨Feat] 자기소개서 채용 우대사항 저장 API 구현#35
yong203 merged 1 commit into
devfrom
feat/#34

Conversation

@yong203

@yong203 yong203 commented Jun 18, 2026

Copy link
Copy Markdown
Member

작업 내용

  • PUT /cover-letters/{coverLetterId}/preferences API를 추가했습니다.
  • 현재 사용자 소유의 삭제되지 않은 DRAFT 자기소개서만 수정 가능하도록 service 정책을 적용했습니다.
  • preferences를 trim 후 Unicode code point 기준 1~3000자로 검증하고, 실패 시 공통 에러 응답의 field details를 반환하도록 구현했습니다.
  • CoverLetter에 채용 우대사항 저장 도메인 메서드를 추가하고, 저장 시 updatedAt을 함께 갱신했습니다.
  • controller/service 테스트로 성공, validation 실패, NOT_FOUND, COVER_LETTER_NOT_DRAFT 케이스를 검증했습니다.

스크린샷

1. test 전 상황 확인

스크린샷 2026-06-19 오전 12 19 14

2. preference 등록 api 요청 진행 @PutMapping("/cover-letters/{coverLetterId}/preferences")

스크린샷 2026-06-19 오전 12 24 29

3. api 실행 후 db 확인 (preference 저장 확인)

스크린샷 2026-06-19 오전 12 23 54

4. preference를 공백으로 요청하였을 시 에러 응답 확인

스크린샷 2026-06-19 오전 12 34 09

관련 이슈

문서 반영

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

확인 결과

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

Summary by CodeRabbit

  • 새로운 기능

    • 자기소개서 채용 우대사항 저장 API 엔드포인트 추가
    • 최대 3,000자 입력 제한 및 필수값 검증
    • 저장 완료 시 업데이트된 정보(상태, 수정 시간) 반환
  • 문서

    • API 문서: 새로운 엔드포인트 및 오류 응답 케이스 추가
    • 로드맵 업데이트: 구현 완료 상태 반영
  • 테스트

    • 엔드포인트 및 서비스 계층 테스트 추가: 성공, 검증 오류, 충돌 시나리오 검증

@yong203 yong203 linked an issue Jun 18, 2026 that may be closed by this pull request
11 tasks
@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 05a5f5a8-222c-4ef3-aea7-a95d800f74e4

📥 Commits

Reviewing files that changed from the base of the PR and between e35da87 and 375c502.

📒 Files selected for processing (10)
  • docs/api/README.md
  • docs/api/cover-letters.md
  • docs/status.md
  • src/main/java/com/daon/rewrite/coverletter/controller/CoverLetterController.java
  • src/main/java/com/daon/rewrite/coverletter/dto/SavePreferencesRequest.java
  • src/main/java/com/daon/rewrite/coverletter/dto/SavePreferencesResponse.java
  • src/main/java/com/daon/rewrite/coverletter/entity/CoverLetter.java
  • src/main/java/com/daon/rewrite/coverletter/service/CoverLetterService.java
  • src/test/java/com/daon/rewrite/coverletter/controller/CoverLetterControllerTest.java
  • src/test/java/com/daon/rewrite/coverletter/service/CoverLetterServiceTest.java

📝 Walkthrough

Walkthrough

PUT /cover-letters/{coverLetterId}/preferences 엔드포인트(API-010)를 구현한다. 요청/응답 DTO, CoverLetter 엔티티의 fillPreferences 메서드, CoverLetterService의 소유자·DRAFT 상태·입력 검증 로직, 컨트롤러 엔드포인트, 서비스/컨트롤러 테스트, API 문서 상태 갱신이 포함된다.

Changes

채용 우대사항 저장 API 구현

Layer / File(s) Summary
요청/응답 DTO 및 엔티티 메서드
src/main/java/com/daon/rewrite/coverletter/dto/SavePreferencesRequest.java, src/main/java/com/daon/rewrite/coverletter/dto/SavePreferencesResponse.java, src/main/java/com/daon/rewrite/coverletter/entity/CoverLetter.java
SavePreferencesRequest 레코드(preferences), SavePreferencesResponse 레코드(id/preferences/status/updatedAt, Asia/Seoul 기준 from() 팩토리), CoverLetter.fillPreferences(preferences, now) 엔티티 메서드가 추가된다.
CoverLetterService savePreferences 로직
src/main/java/com/daon/rewrite/coverletter/service/CoverLetterService.java
MAX_PREFERENCES_LENGTH(3000) 상수, 소유자·삭제 여부·DRAFT 상태 검증 후 fillPreferences를 호출하는 savePreferences 트랜잭션 메서드, 필수 입력·최대 길이 검증 및 정규화를 수행하는 validateAndNormalizePreferences 헬퍼가 추가된다.
CoverLetterController 엔드포인트 추가
src/main/java/com/daon/rewrite/coverletter/controller/CoverLetterController.java
PUT /cover-letters/{coverLetterId}/preferences 엔드포인트 메서드와 관련 DTO import가 추가되어 서비스를 호출하고 SavePreferencesResponse를 반환한다.
서비스 및 컨트롤러 테스트
src/test/java/com/daon/rewrite/coverletter/service/CoverLetterServiceTest.java, src/test/java/com/daon/rewrite/coverletter/controller/CoverLetterControllerTest.java
서비스 테스트에 성공·NOT_FOUND·COVER_LETTER_NOT_DRAFT·VALIDATION_ERROR(공백, 초과 길이) 5개 케이스, 컨트롤러 테스트에 200·400·404·409 응답 케이스 4개가 추가된다.
API 문서 및 상태 갱신
docs/api/README.md, docs/api/cover-letters.md, docs/status.md
API-010 상태가 PlannedImplemented로 갱신되고, cover-letters.mdCOVER_LETTER_NOT_DRAFT Conflict Response 예시가 추가되며, docs/status.md의 REQ-004 항목과 Next Issue Slice Candidates가 갱신된다.

Possibly related PRs

  • Rewrite-Team/Rewrite-BE#19: 동일한 CoverLetterController, CoverLetterService, CoverLetter 엔티티를 대상으로 초기 자기소개서 생성(draft) API를 구현한 PR으로, 이번 PR의 기반 계층을 형성한다.
  • Rewrite-Team/Rewrite-BE#27: CoverLetter 엔티티의 JPA/Instant 기반 퍼시스턴스 리팩토링 PR로, 이번 PR의 fillPreferences(Instant now) 메서드 및 SavePreferencesResponsegetUpdatedAt() 변환 로직이 해당 변경에 의존한다.
🚥 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 PR 제목이 주요 변경사항을 명확하게 요약하고 있으며, API-010 채용 우대사항 저장 API 구현이라는 핵심 목표를 잘 반영하고 있습니다.
Description check ✅ Passed PR 설명이 템플릿 구조를 따르고 있으며, 작업 내용, 관련 이슈, 문서 반영, 확인 결과를 모두 포함하고 있고 스크린샷으로 검증 근거를 제시하고 있습니다.
Linked Issues check ✅ Passed PR 구현이 issue #34의 모든 주요 요구사항을 충족하고 있습니다: API-010 구현, owner/deletedAt/DRAFT 검증, trim 및 1-3000자 검증, field별 details 반환, updatedAt 갱신, 테스트 추가, 문서 업데이트 완료.
Out of Scope Changes check ✅ Passed 모든 변경사항이 issue #34의 작업 범위 내에 있으며, API-009, API-011, API-012, cover_letter_questions, 제출 API 등 제외 대상은 포함되지 않았습니다.

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


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

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

codecov Bot commented Jun 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@yong203 yong203 marked this pull request as ready for review June 18, 2026 15:45
@yong203 yong203 merged commit db77097 into dev Jun 18, 2026
4 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