목표
최초 AI 첨삭의 성공 결과를 하나의 ReviewVersion과 문항별 ReviewVersionQuestionResult로 저장하고, 자기소개서와 LLM Job의 완료 상태를 원자적으로 반영한다.
이 완료 경계는 후속 OpenAI client와 비동기 worker가 호출한다.
작업 범위
-
관련 요구사항/API:
- REQ-005
- REQ-006
- API-015 resultRef
- API-017, API-018 선행 persistence
-
포함할 것:
ReviewVersion JPA entity/repository 구현
ReviewVersionQuestionResult JPA entity/repository 구현
- 최초 첨삭 성공 결과 저장 service 구현
- provider 결과 입력 모델:
questionId, aiReport, rewrittenAnswer
- 저장된 자기소개서 문항과 provider 결과의 1:1 매칭 검증
- 질문, 순서, 최대 글자 수, 원본 답변 snapshot 저장
- Unicode code point 기준 답변 길이 저장
finalAnswer 초기값을 rewrittenAnswer와 동일하게 저장
- 최초 버전 label을
v0.1, requestInstruction을 null로 저장
CoverLetter.status=REVIEWED 및 latestReviewVersionId 갱신
- LLM Job을
COMPLETED로 전환하고 resultRef=REVIEW_VERSION 기록
- 같은 완료 Job 재처리 시 기존 ReviewVersion을 반환해 중복 저장 방지
- entity/repository/service 테스트
docs/status.md 진행 상태와 검증 근거 갱신
-
제외할 것:
- 실제 OpenAI/Spring AI 호출
- 프롬프트와 구조화 응답 파싱
- background worker와 비동기 실행
- API-016 SSE
- API-017/018 조회 endpoint
- 재첨삭과 버전 증가
- 최종 작성본 수정 API
- LLM 실패와 자동 재시도 처리
완료 기준
참고
목표
최초 AI 첨삭의 성공 결과를 하나의
ReviewVersion과 문항별ReviewVersionQuestionResult로 저장하고, 자기소개서와 LLM Job의 완료 상태를 원자적으로 반영한다.이 완료 경계는 후속 OpenAI client와 비동기 worker가 호출한다.
작업 범위
관련 요구사항/API:
포함할 것:
ReviewVersionJPA entity/repository 구현ReviewVersionQuestionResultJPA entity/repository 구현questionId,aiReport,rewrittenAnswerfinalAnswer초기값을rewrittenAnswer와 동일하게 저장v0.1,requestInstruction을 null로 저장CoverLetter.status=REVIEWED및latestReviewVersionId갱신COMPLETED로 전환하고resultRef=REVIEW_VERSION기록docs/status.md진행 상태와 검증 근거 갱신제외할 것:
완료 기준
v0.1ReviewVersion이 하나 생성된다.finalAnswer가 최초 AI 수정본으로 초기화된다.REVIEWED가 되고 최신 버전 ID가 기록된다.COMPLETED가 되고 ReviewVersion resultRef가 기록된다.git diff --check,./gradlew test,./gradlew check가 통과한다.참고
docs/erd.mddocs/api/review-versions.md