Skip to content

[✨Feat] 자기소개서 제출 및 최초 첨삭 Job 생성 #40

Description

@yong203

목표

작성 완료된 자기소개서를 제출하고 최초 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 자기소개서 상세 조회

완료 기준

  • 유효한 DRAFT 자기소개서를 제출하면 상태가 REVIEWING이 되고 PENDING Job이 생성된다.
  • REVIEW_FAILED 재시도는 새 Job을 생성하되 최초 submittedAt을 유지한다.
  • 필수 데이터가 누락되면 VALIDATION_ERRORfield/reason details를 반환하고 상태와 Job이 변경되지 않는다.
  • REVIEWING 중복 호출과 동시 호출에서 Job이 추가 생성되지 않는다.
  • REVIEWED 상태에서는 새 Job 없이 최신 첨삭 버전 ID를 반환한다.
  • 다른 사용자 소유, 삭제된 자기소개서는 NOT_FOUND를 반환한다.
  • git diff --check, ./gradlew test, ./gradlew check가 통과한다.

참고

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