목표
사용자가 자기소개서 등록 step1에서 입력한 기본 정보를 임시저장할 수 있도록 API-009 PUT /cover-letters/{coverLetterId}/basic-info를 구현한다.
기본 정보 저장은 현재 cover_letters 루트 테이블만으로 독립 구현 가능하며, 이후 step2/step3 저장 API가 재사용할 owner 검증, deletedAt 제외, DRAFT 상태 검증, validation 응답 패턴을 먼저 확정한다.
작업 범위
-
관련 요구사항/API:
- REQ-004 자기소개서 등록 step 저장
- API-009
PUT /cover-letters/{coverLetterId}/basic-info
-
포함할 것:
title, companyName, positionTitle, jobPostingUrl 요청 DTO 추가
- 기본 정보 저장 응답 DTO 추가
- 현재 사용자 소유이면서 삭제되지 않은 자기소개서만 수정 가능하도록 검증
- 존재하지 않거나, 다른 사용자 소유이거나, 삭제된 자기소개서는
NOT_FOUND
DRAFT 상태에서만 수정 가능하도록 검증
DRAFT가 아니면 COVER_LETTER_NOT_DRAFT를 409로 반환
- 문자열 trim 후 저장
jobPostingUrl 누락 또는 blank는 null로 저장
jobPostingUrl 값이 있으면 URL 형식과 최대 500자 검증
updatedAt 갱신
- controller/service/repository 또는 필요한 테스트 갱신
docs/api/README.md, docs/status.md 상태 갱신
- 필요 시
docs/api/cover-letters.md의 에러 응답 형식 보강
-
제외할 것:
- API-010 채용 우대사항 저장
- API-011 질문과 답변 저장
- API-012 자기소개서 상세 조회
cover_letter_questions entity/repository 추가
- 제출 API 및 LLM Job 생성
완료 기준
참고
- 등록 step 저장 API는
docs/decisions/cover-letters.md의 Decision 023에 따라 DRAFT 상태에서만 허용한다.
- URL은 형식만 검증하고 실제 접근 가능 여부는 검증하지 않는다.
목표
사용자가 자기소개서 등록 step1에서 입력한 기본 정보를 임시저장할 수 있도록
API-009 PUT /cover-letters/{coverLetterId}/basic-info를 구현한다.기본 정보 저장은 현재
cover_letters루트 테이블만으로 독립 구현 가능하며, 이후 step2/step3 저장 API가 재사용할 owner 검증, deletedAt 제외, DRAFT 상태 검증, validation 응답 패턴을 먼저 확정한다.작업 범위
관련 요구사항/API:
PUT /cover-letters/{coverLetterId}/basic-info포함할 것:
title,companyName,positionTitle,jobPostingUrl요청 DTO 추가NOT_FOUNDDRAFT상태에서만 수정 가능하도록 검증DRAFT가 아니면COVER_LETTER_NOT_DRAFT를 409로 반환jobPostingUrl누락 또는 blank는null로 저장jobPostingUrl값이 있으면 URL 형식과 최대 500자 검증updatedAt갱신docs/api/README.md,docs/status.md상태 갱신docs/api/cover-letters.md의 에러 응답 형식 보강제외할 것:
cover_letter_questionsentity/repository 추가완료 기준
PUT /cover-letters/{coverLetterId}/basic-info성공 시 문서 계약의 기본 정보 응답을 반환한다.jobPostingUrl은null로 저장된다.title은 trim 후 1~50자만 허용한다.companyName은 trim 후 1~30자만 허용한다.positionTitle은 trim 후 1~30자만 허용한다.jobPostingUrl은 선택값이며 값이 있으면 trim 후 최대 500자와 URL 형식을 검증한다.VALIDATION_ERROR와 필드별details를 반환한다.NOT_FOUND를 반환한다.DRAFT가 아닌 자기소개서는COVER_LETTER_NOT_DRAFT를 반환한다.updatedAt이 갱신된다.docs/api/README.md에서 API-009 상태가Implemented로 갱신된다.docs/status.md에 관련 이슈와 검증 근거가 반영된다.git diff --check,./gradlew test,./gradlew check가 통과한다.참고
docs/decisions/cover-letters.md의 Decision 023에 따라DRAFT상태에서만 허용한다.