목표
LLM 기반 비동기 작업의 공통 기반인 llm_jobs persistence와 Job 상태 조회 API skeleton을 구현한다.
이번 이슈는 실제 Job 생성 API나 LLM provider 호출 없이, 다음 submit API가 사용할 Job 저장 모델과 GET /llm-jobs/{jobId} 응답 계약을 먼저 고정한다.
작업 범위
관련 요구사항/API:
REQ-005
API-015 GET /llm-jobs/{jobId}
포함할 것:
llm_jobs JPA entity/repository 추가
Job type/status/target/result/error/progress 필드 구현
GET /llm-jobs/{jobId} controller/service/DTO 구현
targetType=COVER_LETTER인 Job은 연결된 자기소개서의 owner 기준으로 접근 권한 검증
존재하지 않는 Job, 다른 사용자 소유 자기소개서에 연결된 Job, 삭제된 자기소개서에 연결된 Job은 NOT_FOUND
partialResult는 이번 이슈에서 항상 null
repository/service/controller 테스트 추가
docs/api/README.md, docs/api/llm-jobs.md, docs/status.md 갱신
제외할 것:
API-014 submit 구현
API-016 SSE stream
실제 LLM provider 호출
background worker/async executor
ReviewVersion 생성
partial result cache/storage
완료 기준
저장된 Job을 GET /llm-jobs/{jobId}로 조회할 수 있다.
응답에 id, type, status, target, progress, attempt, resultRef, error, createdAt, completedAt이 계약대로 포함된다.
partialResult는 skeleton 범위에서 null로 반환된다.
다른 사용자 소유 또는 삭제된 자기소개서에 연결된 Job은 NOT_FOUND를 반환한다.
git diff --check, ./gradlew test, ./gradlew check가 통과한다.
참고
선행 PR: [✨Feat] 자기소개서 문항 저장 API 구현 #37 자기소개서 문항 저장 API 구현
API 계약: docs/api/llm-jobs.md
Persistence 기준: docs/erd.md
설계 결정: docs/decisions/llm-jobs.md
상태 추적: docs/status.md
목표
LLM 기반 비동기 작업의 공통 기반인
llm_jobspersistence와 Job 상태 조회 API skeleton을 구현한다.이번 이슈는 실제 Job 생성 API나 LLM provider 호출 없이, 다음 submit API가 사용할 Job 저장 모델과
GET /llm-jobs/{jobId}응답 계약을 먼저 고정한다.작업 범위
관련 요구사항/API:
GET /llm-jobs/{jobId}포함할 것:
llm_jobsJPA entity/repository 추가GET /llm-jobs/{jobId}controller/service/DTO 구현targetType=COVER_LETTER인 Job은 연결된 자기소개서의 owner 기준으로 접근 권한 검증NOT_FOUNDpartialResult는 이번 이슈에서 항상nulldocs/api/README.md,docs/api/llm-jobs.md,docs/status.md갱신제외할 것:
완료 기준
GET /llm-jobs/{jobId}로 조회할 수 있다.partialResult는 skeleton 범위에서null로 반환된다.NOT_FOUND를 반환한다.git diff --check,./gradlew test,./gradlew check가 통과한다.참고
docs/api/llm-jobs.mddocs/erd.mddocs/decisions/llm-jobs.mddocs/status.md