Skip to content

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

Description

@yong203

목표

사용자가 자기소개서 등록 step2에서 입력한 채용 우대사항을 임시저장할 수 있도록 API-010 PUT /cover-letters/{coverLetterId}/preferences를 구현한다.

이 작업은 step1 기본 정보 저장 API에서 확정한 owner 검증, deletedAt 제외, DRAFT 상태 검증, trim 후 validation, field별 validation details 응답 패턴을 동일하게 적용한다.

작업 범위

  • 관련 요구사항/API:

    • REQ-004 자기소개서 등록 step 저장
    • API-010 PUT /cover-letters/{coverLetterId}/preferences
  • 포함할 것:

    • preferences 요청 DTO 추가
    • 채용 우대사항 저장 응답 DTO 추가
    • 현재 사용자 소유이면서 삭제되지 않은 자기소개서만 수정 가능하도록 검증
    • 존재하지 않거나, 다른 사용자 소유이거나, 삭제된 자기소개서는 NOT_FOUND
    • DRAFT 상태에서만 수정 가능하도록 검증
    • DRAFT가 아니면 COVER_LETTER_NOT_DRAFT 반환
    • preferences trim 후 저장
    • preferences trim 후 1~3000 Unicode code point validation
    • validation 실패 시 VALIDATION_ERROR와 field별 details 반환
    • 저장 시 updatedAt 갱신
    • controller/service 테스트 추가 또는 갱신
    • docs/api/README.md, docs/status.md 상태 갱신
    • 필요 시 docs/api/cover-letters.md의 에러 응답 형식 보강
  • 제외할 것:

    • API-009 기본 정보 저장 변경
    • API-011 질문과 답변 저장
    • API-012 자기소개서 상세 조회
    • cover_letter_questions entity/repository 추가
    • 제출 API 및 LLM Job 생성

완료 기준

  • PUT /cover-letters/{coverLetterId}/preferences 성공 시 문서 계약의 응답을 반환한다.
  • 저장 값은 trim된 preferences 값이다.
  • preferences는 trim 후 1~3000자만 허용한다.
  • validation 실패는 VALIDATION_ERROR와 field별 details를 반환한다.
  • 없는 id, 다른 owner, 삭제된 자기소개서는 NOT_FOUND를 반환한다.
  • DRAFT가 아닌 자기소개서는 COVER_LETTER_NOT_DRAFT를 반환한다.
  • 저장 시 updatedAt이 갱신된다.
  • 관련 테스트가 추가되거나 갱신된다.
  • docs/api/README.md에서 API-010 상태가 Implemented로 갱신된다.
  • docs/status.md에 관련 이슈와 검증 근거가 반영된다.
  • git diff --check, ./gradlew test, ./gradlew check가 통과한다.

참고

  • 등록 step 저장 API는 docs/decisions/cover-letters.md의 Decision 023에 따라 DRAFT 상태에서만 허용한다.
  • 이번 이슈는 cover_letters.preferences 컬럼만 사용한다.

Metadata

Metadata

Assignees

Labels

✨ Feature새로운 기능 구현

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions