목표
작성 완료된 자기소개서를 제출하고 최초 AI 첨삭용 LLM Job을 생성하는 API-014를 구현한다.
작업 범위
-
관련 요구사항/API:
- REQ-005
- API-014
POST /cover-letters/{coverLetterId}/submit
-
포함할 것:
- 현재 사용자 소유의 active 자기소개서 조회
- 필수 step 데이터 최종 검증
DRAFT, REVIEW_FAILED에서 COVER_LETTER_REVIEW PENDING Job 생성
- 자기소개서 상태를
REVIEWING으로 전환
- 최초 제출 시
submittedAt 기록, 재시도 시 기존 값 유지
- Job
progressTotal을 저장된 문항 수로 설정
REVIEWING 중복 호출 시 기존 PENDING/PROCESSING 최초 첨삭 Job 반환
REVIEWED 호출 시 latestReviewVersionId 반환
- 동일 자기소개서의 다른 진행 중 Job은
LLM_JOB_ALREADY_RUNNING
- 비관적 행 잠금으로 동시 제출 시 중복 Job 생성 방지
- controller/service/repository 테스트
- API 및 진행 상태 문서 갱신
- validation details는 현재 공통 계약인
field/reason을 유지하고 Decision 053을 이에 맞게 정리
-
제외할 것:
- 실제 LLM provider 호출
- background worker와 Job 상태 실행 흐름
- API-016 SSE
- ReviewVersion 및 첨삭 결과 생성
- partial result 저장
- soft delete 시 진행 중 Job 취소
- API-012 자기소개서 상세 조회
완료 기준
참고
목표
작성 완료된 자기소개서를 제출하고 최초 AI 첨삭용 LLM Job을 생성하는 API-014를 구현한다.
작업 범위
관련 요구사항/API:
POST /cover-letters/{coverLetterId}/submit포함할 것:
DRAFT,REVIEW_FAILED에서COVER_LETTER_REVIEWPENDING Job 생성REVIEWING으로 전환submittedAt기록, 재시도 시 기존 값 유지progressTotal을 저장된 문항 수로 설정REVIEWING중복 호출 시 기존 PENDING/PROCESSING 최초 첨삭 Job 반환REVIEWED호출 시latestReviewVersionId반환LLM_JOB_ALREADY_RUNNINGfield/reason을 유지하고 Decision 053을 이에 맞게 정리제외할 것:
완료 기준
DRAFT자기소개서를 제출하면 상태가REVIEWING이 되고 PENDING Job이 생성된다.REVIEW_FAILED재시도는 새 Job을 생성하되 최초submittedAt을 유지한다.VALIDATION_ERROR와field/reasondetails를 반환하고 상태와 Job이 변경되지 않는다.REVIEWING중복 호출과 동시 호출에서 Job이 추가 생성되지 않는다.REVIEWED상태에서는 새 Job 없이 최신 첨삭 버전 ID를 반환한다.NOT_FOUND를 반환한다.git diff --check,./gradlew test,./gradlew check가 통과한다.참고
docs/api/cover-letters.mddocs/api/llm-jobs.md