Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
71fb6a4
[Test] 토스 직접 승인과 콜백 경합 회귀 테스트 추가 (#261)
shinae1023 Aug 11, 2026
b338745
[Fix] 토스페이 콜백 상태 충돌을 200 ack 처리 (#261)
shinae1023 Aug 11, 2026
fb8dd9a
[Fix] PROCESSING 상태의 토스페이 콜백을 멱등적으로 처리 (#261)
shinae1023 Aug 11, 2026
12ad692
[Refactor] 결제 게이트웨이 공통 인터페이스와 내부 모델 도입 (#261)
shinae1023 Aug 11, 2026
08c5918
[Test] 동시성 테스트 helper 타임아웃 추가 (#261)
shinae1023 Aug 11, 2026
a54fddb
[Refactor] TossPay 준비 로직을 PaymentGateway로 이동 (#261)
shinae1023 Aug 11, 2026
ac92c67
Merge pull request #262 from JobDri-Developer/refactor/#261-payment
shinae1023 Aug 11, 2026
67f298f
[Refactor] PortOne 준비/조회 경로를 PaymentGateway로 이동 (#261)
shinae1023 Aug 11, 2026
f6e9ab0
Merge pull request #263 from JobDri-Developer/refactor/#261-payment
shinae1023 Aug 11, 2026
882e5db
[Refactor] 환불 로직의 결제사 분기를 PaymentGateway로 이관 (#261)
shinae1023 Aug 11, 2026
dad51db
[Refactor] PaymentTransactionService를 내부 상태 전이 중심으로 단순화 (#261)
shinae1023 Aug 11, 2026
e91bb7d
[Feat] 크레딧 거래내역 페이징 조회 지원 추가 (#261)
shinae1023 Aug 11, 2026
e7b55a4
[Refactor] payment 패키지 구조를 역할 기준으로 재정리 (#261)
shinae1023 Aug 11, 2026
2856c46
[Fix] 결제 상태 전이와 거래내역 페이징 회귀 보강 (#261)
shinae1023 Aug 11, 2026
428b005
[Refactor] mock 전용 생성 엔드포인트 제거 및 익스텐션 자동 생성 중단 (#265)
shinae1023 Aug 11, 2026
8f77a37
[Refactor] mock 지원 생성 전용 서비스 로직 제거 (#265)
shinae1023 Aug 11, 2026
ee2beaf
[Refactor] mock 공고 생성 서비스 체인 참조 정리 (#265)
shinae1023 Aug 11, 2026
f7c57dd
[Refactor] mock 공고 생성 DTO 및 질문 캐시 서비스 정리 (#265)
shinae1023 Aug 11, 2026
587413a
Merge pull request #264 from JobDri-Developer/refactor/#261-payment
shinae1023 Aug 11, 2026
f1bc5fb
Merge pull request #267 from JobDri-Developer/refactor/#265-mockApply…
shinae1023 Aug 11, 2026
c2e3195
[Test] analysis async facade 상태 조회와 취소 회귀 보강 (#266)
shinae1023 Aug 11, 2026
6c43e09
[Refactor] Analysis 결과 저장/응답 조립 책임 분리 (#266)
shinae1023 Aug 11, 2026
dc212cb
[Refactor] Analysis 크레딧 정책 경계 분리 (#266)
shinae1023 Aug 11, 2026
e09888d
[Refactor] 분석 실행 준비 로직 분리 (#266)
shinae1023 Aug 11, 2026
c526bf2
[Fix] 코드리뷰 반영
shinae1023 Aug 11, 2026
3b4dd5f
Merge pull request #268 from JobDri-Developer/refactor/#266-analysis
shinae1023 Aug 11, 2026
fcdeb86
[Refactor] analysis AI 호출 port 도입 (#266)
shinae1023 Aug 11, 2026
0eae3be
[Refactor] AnalysisAiClient 역할 분리 (#266)
shinae1023 Aug 11, 2026
3cce00d
[Refactor] analysis async orchestration/infrastructure 분리 (#266)
shinae1023 Aug 11, 2026
ed3a1d3
[Refactor] QuestionService를 command/query/catalog로 분리 (#266)
shinae1023 Aug 11, 2026
9a0a987
[Refactor] analysis dto 패키지 구조 재배치 (#266)
shinae1023 Aug 11, 2026
cfc88f4
[Refactor] analysis 상태 타입을 domain/type으로 분리 (#266)
shinae1023 Aug 11, 2026
1f2ac25
[Refactor] evaluation 패키지를 runtime analysis와 분리 (#266)
shinae1023 Aug 11, 2026
32c6369
[Refactor] analysis async/question 경계 및 검증 로직 정리 (#266)
shinae1023 Aug 11, 2026
4ea5046
[Fix] analysis async 유실 복구와 task 동시성 처리 보강 (#266)
shinae1023 Aug 11, 2026
ddfe7e7
[Fix] analysis getContext 트랜잭션 경계와 동시성 처리 개선 (#266)
shinae1023 Aug 11, 2026
edac47b
Merge pull request #269 from JobDri-Developer/refactor/#266-analysis
shinae1023 Aug 11, 2026
4539229
[Fix] async sweep 대상 정합성 보완 (#271)
shinae1023 Aug 12, 2026
78ea1c2
[Refactor] async timeout 조회를 batch query로 분리 (#271)
shinae1023 Aug 12, 2026
8e5574a
[Refactor] async sweep 시간 의존성을 Clock으로 치환 (#271)
shinae1023 Aug 12, 2026
2fcd0ca
[Refactor] async credit refund 책임 공용화 (#271)
shinae1023 Aug 12, 2026
6b8c6c5
[Fix] async credit 상태 전이 멱등성 보강 (#271)
shinae1023 Aug 12, 2026
43d44f6
[Fix] PUBLISH_FAILED 재접수 원자성 보강 (#271)
shinae1023 Aug 12, 2026
9f14879
[Fix] completeTask 동시 완료 회귀 테스트 보강 (#271)
shinae1023 Aug 12, 2026
86c30e6
Merge pull request #272 from JobDri-Developer/refactor/#271-analysis-…
shinae1023 Aug 12, 2026
0f40105
[Refactor] AnalysisAsyncFacadeService composition 전환 (#271)
shinae1023 Aug 12, 2026
7130bdb
[Refactor] AnalysisAsyncProcessor composition 전환 (#271)
shinae1023 Aug 12, 2026
1870473
[Refactor] AnalysisWorkerBridgeService composition 전환 (#271)
shinae1023 Aug 12, 2026
dbf7a01
[Refactor] AnalysisAsyncSweepService composition 전환 (#271)
shinae1023 Aug 12, 2026
9ddf313
Merge pull request #273 from JobDri-Developer/refactor/#271-analysis-…
shinae1023 Aug 12, 2026
ab84de0
[Refactor] AnalysisAiClient 중복 코드 정리 (#271)
shinae1023 Aug 12, 2026
ca68ba0
[Refactor] Question custom candidate 저장 경합 분리 (#271)
shinae1023 Aug 12, 2026
7d39f79
[Refactor] Question candidate 식별자 충돌 방지 (#271)
shinae1023 Aug 12, 2026
ea92fdd
Merge pull request #274 from JobDri-Developer/refactor/#271-analysis-…
shinae1023 Aug 12, 2026
4b2b12d
[Refactor] evaluation 전용 내부 모델과 mapper 도입 (#270)
shinae1023 Aug 12, 2026
76ea303
[Refactor] NLG evaluation을 evaluation snapshot 기반으로 전환 (#270)
shinae1023 Aug 12, 2026
510719a
[Fix] evaluation bean 생성자와 analysis 테스트 복구 (#270)
shinae1023 Aug 12, 2026
c4bfddb
Merge branch 'dev' into refactor/#270-evaluation-runtime-decouple
shinae1023 Aug 12, 2026
11f64a7
Merge pull request #275 from JobDri-Developer/refactor/#270-evaluatio…
shinae1023 Aug 12, 2026
af05019
[Refactor] evaluation 전용 sanitization facade 도입 (#270)
shinae1023 Aug 12, 2026
beb77c3
[Refactor] evaluation 분석 AI port 도입 (#270)
shinae1023 Aug 12, 2026
3fc81ac
[Fix] evaluation 사례 deadline과 command 검증 보강 (#270)
shinae1023 Aug 12, 2026
aca3ec0
Merge pull request #276 from JobDri-Developer/refactor/#270-evaluatio…
shinae1023 Aug 12, 2026
79cc4c1
[Refactor] evaluation analysis policy 상수 분리 (#270)
shinae1023 Aug 12, 2026
bcee241
[Refactor] missing keyword replay 로컬 스냅샷화 (#270)
shinae1023 Aug 12, 2026
335b914
[Refactor] evaluation 패키지 의존 방향 고정 (#270)
shinae1023 Aug 12, 2026
882bdea
[Fix] evaluation 리뷰 반영 및 replay 검증 강화 (#270)
shinae1023 Aug 12, 2026
c7bef92
Merge pull request #277 from JobDri-Developer/refactor/#270-analysis-…
shinae1023 Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions analysis-server
Submodule analysis-server added at 892724
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.jobdri.jobdri_api.domain.analysis.service.core;
package com.jobdri.jobdri_api.domain.analysis.application.model;

import com.jobdri.jobdri_api.domain.analysis.dto.criteria.JobCategoryEvaluationCriteria;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.SimilarJobPostingContext;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.criteria.JobCategoryEvaluationCriteria;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.SimilarJobPostingContext;
import com.jobdri.jobdri_api.domain.analysis.entity.Question;
import com.jobdri.jobdri_api.domain.corpus.service.CorpusRetrievalService.RetrievalContext;
import com.jobdri.jobdri_api.domain.jobposting.entity.JobPosting;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.jobdri.jobdri_api.domain.analysis.application.port;

import com.jobdri.jobdri_api.domain.analysis.dto.external.llm.AnalysisLlmResponse;
import com.jobdri.jobdri_api.domain.analysis.application.model.AnalysisExecutionPayload;

public interface AnalysisGenerator {
AnalysisLlmResponse analyze(AnalysisExecutionPayload payload);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
package com.jobdri.jobdri_api.domain.analysis.application.usecase.async;

import com.jobdri.jobdri_api.domain.analysis.dto.response.AnalysisAsyncCancelResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.response.AnalysisAsyncStatusResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.response.AnalysisAsyncSubmitResponse;
import com.jobdri.jobdri_api.domain.analysis.entity.AnalysisAsyncTask;
import com.jobdri.jobdri_api.domain.analysis.service.async.AnalysisAsyncProcessor;
import com.jobdri.jobdri_api.domain.analysis.service.async.AnalysisAsyncTaskService;
import com.jobdri.jobdri_api.domain.analysis.service.core.AnalysisService;
import com.jobdri.jobdri_api.domain.analysis.type.AnalysisAsyncFailureReason;
import com.jobdri.jobdri_api.domain.user.entity.User;
import com.jobdri.jobdri_api.domain.user.service.UserService;
import com.jobdri.jobdri_api.global.apiPayload.code.GeneralErrorCode;
import com.jobdri.jobdri_api.global.apiPayload.exception.GeneralException;
import org.hibernate.exception.ConstraintViolationException;
import org.springframework.dao.DataIntegrityViolationException;

import java.util.Optional;

// 분석 비동기 작업의 접수/조회/취소 유스케이스를 조율한다.
public class AnalysisAsyncUseCase {
private static final String ACTIVE_TASK_UNIQUE_CONSTRAINT = "uk_analysis_async_tasks_active_user_mock_apply";

private final AnalysisAsyncTaskService analysisAsyncTaskService;
private final AnalysisAsyncProcessor analysisAsyncProcessor;
private final AnalysisService analysisService;
private final UserService userService;

public AnalysisAsyncUseCase(
AnalysisAsyncTaskService analysisAsyncTaskService,
AnalysisAsyncProcessor analysisAsyncProcessor,
AnalysisService analysisService,
UserService userService
) {
this.analysisAsyncTaskService = analysisAsyncTaskService;
this.analysisAsyncProcessor = analysisAsyncProcessor;
this.analysisService = analysisService;
this.userService = userService;
}

public AnalysisAsyncSubmitResponse submit(User user, Long mockApplyId) {
User validatedUser = userService.validateUser(user);
analysisService.validateAnalysisRequest(validatedUser, mockApplyId);

return analysisAsyncTaskService.findActiveTask(validatedUser.getId(), mockApplyId)
.map(this::toInProgressResponse)
.orElseGet(() -> createCachedOrProcessTask(validatedUser, mockApplyId));
}

public AnalysisAsyncStatusResponse getTask(User user, Long mockApplyId, String taskId) {
User validatedUser = userService.validateUser(user);
AnalysisAsyncStatusResponse status = analysisAsyncTaskService.getTaskStatus(validatedUser.getId(), taskId);
if (!status.mockApplyId().equals(mockApplyId)) {
throw new GeneralException(GeneralErrorCode.FORBIDDEN, "요청한 mockApplyId와 작업 정보가 일치하지 않습니다.");
}
if (!"SUCCEEDED".equals(status.status())) {
return status;
}

return status.withResult(analysisService.getAnalysis(validatedUser, status.mockApplyId()));
}

public AnalysisAsyncCancelResponse cancel(User user, Long mockApplyId, String taskId) {
User validatedUser = userService.validateUser(user);
return analysisAsyncTaskService.cancelTask(validatedUser.getId(), mockApplyId, taskId);
}

private AnalysisAsyncSubmitResponse createCachedOrProcessTask(User user, Long mockApplyId) {
Optional<AnalysisAsyncTask> recoverableTask =
analysisAsyncTaskService.findRecoverablePublishFailureTask(user.getId(), mockApplyId);
if (recoverableTask.isPresent()) {
return reopenAndProcessTask(user, mockApplyId, recoverableTask.get());
}
if (analysisService.hasReusableAnalysis(user, mockApplyId)) {
return toCachedResponse();
}
return createAndProcessTask(user, mockApplyId);
}

private AnalysisAsyncSubmitResponse createAndProcessTask(User user, Long mockApplyId) {
PendingTaskResult pendingTaskResult = createPendingTask(user, mockApplyId);
if (!pendingTaskResult.created()) {
return toInProgressResponse(pendingTaskResult.task());
}

AnalysisAsyncTask task = pendingTaskResult.task();
return processTask(user, mockApplyId, task);
}

private AnalysisAsyncSubmitResponse reopenAndProcessTask(User user, Long mockApplyId, AnalysisAsyncTask task) {
AnalysisAsyncTaskService.ReopenPublishFailureResult reopenResult =
analysisAsyncTaskService.reopenPublishFailureTask(task.getTaskId());
if (!reopenResult.reopened()) {
return toInProgressResponse(reopenResult.task());
}
return processTask(user, mockApplyId, reopenResult.task());
}

private AnalysisAsyncSubmitResponse processTask(User user, Long mockApplyId, AnalysisAsyncTask task) {
String taskId = task.getTaskId();
try {
analysisAsyncProcessor.process(
taskId,
user.getId(),
mockApplyId,
task.getMaxRetryCount()
);
return new AnalysisAsyncSubmitResponse(
taskId,
"PENDING",
"자소서 분석 비동기 작업이 접수되었습니다.",
false,
false
);
} catch (RuntimeException e) {
analysisAsyncTaskService.markFailed(
taskId,
AnalysisAsyncFailureReason.PUBLISH_FAILED,
"자소서 분석 비동기 작업 발행에 실패했습니다.",
task.getRetryCount()
);
throw e;
}
}

private PendingTaskResult createPendingTask(User user, Long mockApplyId) {
try {
return new PendingTaskResult(
analysisAsyncTaskService.createPendingTask(user.getId(), mockApplyId),
true
);
} catch (DataIntegrityViolationException e) {
if (!isActiveTaskUniqueConflict(e)) {
throw e;
}
AnalysisAsyncTask existingTask = analysisAsyncTaskService.findActiveTask(user.getId(), mockApplyId)
.orElseThrow(() -> e);
return new PendingTaskResult(existingTask, false);
}
}

private AnalysisAsyncSubmitResponse toInProgressResponse(AnalysisAsyncTask task) {
return new AnalysisAsyncSubmitResponse(
task.getTaskId(),
task.getStatus().name(),
"이미 진행 중인 자소서 분석 작업이 있습니다.",
false,
false
);
}

private AnalysisAsyncSubmitResponse toCachedResponse() {
return new AnalysisAsyncSubmitResponse(
null,
"SUCCEEDED",
"동일 입력의 기존 자소서 분석 결과를 재사용했습니다.",
true,
true
);
}

private boolean isActiveTaskUniqueConflict(DataIntegrityViolationException exception) {
Throwable cause = exception;
while (cause != null) {
if (cause instanceof ConstraintViolationException constraintViolation
&& ACTIVE_TASK_UNIQUE_CONSTRAINT.equalsIgnoreCase(constraintViolation.getConstraintName())) {
return true;
}
cause = cause.getCause();
}
return false;
}

private record PendingTaskResult(AnalysisAsyncTask task, boolean created) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

import com.jobdri.jobdri_api.domain.analysis.dto.response.AnalysisAsyncStatusResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.response.AnalysisResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerCompleteRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerContextRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerContextResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerFailureRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerRetryRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerResultStoreRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.worker.AnalysisWorkerRunningRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerCompleteRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerContextRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerContextResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerFailureRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerRetryRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerResultStoreRequest;
import com.jobdri.jobdri_api.domain.analysis.dto.internal.worker.AnalysisWorkerRunningRequest;
import com.jobdri.jobdri_api.domain.analysis.service.async.AnalysisAsyncTaskService;
import com.jobdri.jobdri_api.domain.analysis.service.async.AnalysisWorkerBridgeService;
import com.jobdri.jobdri_api.domain.workerresult.dto.WorkerTaskResultResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
import com.jobdri.jobdri_api.domain.analysis.dto.response.QuestionAnswerResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.response.QuestionCandidateResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.response.QuestionSelectionResponse;
import com.jobdri.jobdri_api.domain.analysis.service.question.QuestionService;
import com.jobdri.jobdri_api.domain.analysis.service.question.QuestionCommandService;
import com.jobdri.jobdri_api.domain.analysis.service.question.QuestionQueryService;
import com.jobdri.jobdri_api.global.apiPayload.ApiResponse;
import com.jobdri.jobdri_api.global.security.UserDetailsImpl;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -32,7 +33,8 @@
@Tag(name = "Question", description = "자소서 문항 선택 및 답변 저장 API")
public class QuestionController {

private final QuestionService questionService;
private final QuestionQueryService questionQueryService;
private final QuestionCommandService questionCommandService;

@Operation(summary = "문항 후보 목록 조회", description = "문항 선택 화면에서 사용할 기본 문항 후보와 선택 여부를 조회합니다.")
@GetMapping("/candidates")
Expand All @@ -42,7 +44,7 @@ public ApiResponse<List<QuestionCandidateResponse>> getQuestionCandidates(
) {
return ApiResponse.onSuccess(
"문항 후보 목록 조회에 성공했습니다.",
questionService.getQuestionCandidates(userDetails.getUser(), mockApplyId)
questionQueryService.getQuestionCandidates(userDetails.getUser(), mockApplyId)
);
}

Expand All @@ -55,7 +57,7 @@ public ApiResponse<QuestionCandidateResponse> addCustomQuestionCandidate(
) {
return ApiResponse.onSuccess(
"직접 추가 문항 후보가 생성되었습니다.",
questionService.addCustomQuestionCandidate(userDetails.getUser(), mockApplyId, request)
questionCommandService.addCustomQuestionCandidate(userDetails.getUser(), mockApplyId, request)
);
}

Expand All @@ -67,7 +69,7 @@ public ApiResponse<QuestionSelectionResponse> getSelectedQuestions(
) {
return ApiResponse.onSuccess(
"선택 문항 조회에 성공했습니다.",
questionService.getSelectedQuestions(userDetails.getUser(), mockApplyId)
questionQueryService.getSelectedQuestions(userDetails.getUser(), mockApplyId)
);
}

Expand All @@ -80,7 +82,7 @@ public ApiResponse<QuestionSelectionResponse> saveSelectedQuestions(
) {
return ApiResponse.onSuccess(
"선택 문항이 저장되었습니다.",
questionService.saveSelectedQuestions(userDetails.getUser(), mockApplyId, request)
questionCommandService.saveSelectedQuestions(userDetails.getUser(), mockApplyId, request)
);
}

Expand All @@ -93,7 +95,7 @@ public ApiResponse<QuestionAnswerResponse> saveAnswers(
) {
return ApiResponse.onSuccess(
"자소서 답변이 저장되었습니다.",
questionService.saveAnswers(userDetails.getUser(), mockApplyId, request)
questionCommandService.saveAnswers(userDetails.getUser(), mockApplyId, request)
);
}

Expand All @@ -106,7 +108,7 @@ public ApiResponse<QuestionSelectionResponse> deleteQuestion(
) {
return ApiResponse.onSuccess(
"선택 문항이 삭제되었습니다.",
questionService.deleteQuestion(userDetails.getUser(), mockApplyId, questionId)
questionCommandService.deleteQuestion(userDetails.getUser(), mockApplyId, questionId)
);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.llm;
package com.jobdri.jobdri_api.domain.analysis.dto.external.llm;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.llm;
package com.jobdri.jobdri_api.domain.analysis.dto.external.llm;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.llm;
package com.jobdri.jobdri_api.domain.analysis.dto.external.llm;

public record CandidateRecheckResponse(
RecheckDecision decision,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.llm;
package com.jobdri.jobdri_api.domain.analysis.dto.external.llm;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.criteria;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.criteria;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import com.jobdri.jobdri_api.global.logging.LoggingMdcKeys;
import lombok.Builder;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import com.jobdri.jobdri_api.domain.analysis.dto.llm.AnalysisLlmResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.external.llm.AnalysisLlmResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import com.jobdri.jobdri_api.domain.analysis.entity.AnalysisAsyncTask.FailureReason;
import com.jobdri.jobdri_api.domain.analysis.type.AnalysisAsyncFailureReason;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

public record AnalysisWorkerFailureRequest(
@NotBlank String errorMessage,
@NotNull FailureReason failureReason,
@NotNull AnalysisAsyncFailureReason failureReason,
@Min(0) int retryCount,
@NotBlank String workerId,
Long queueLatencyMillis
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import com.jobdri.jobdri_api.domain.analysis.dto.llm.AnalysisLlmResponse;
import com.jobdri.jobdri_api.domain.analysis.dto.external.llm.AnalysisLlmResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import com.jobdri.jobdri_api.domain.analysis.entity.AnalysisAsyncTask.FailureReason;
import com.jobdri.jobdri_api.domain.analysis.type.AnalysisAsyncFailureReason;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

public record AnalysisWorkerRetryRequest(
@NotBlank String errorMessage,
@NotNull FailureReason failureReason,
@NotNull AnalysisAsyncFailureReason failureReason,
@Min(0) int retryCount,
@NotBlank String workerId,
Long queueLatencyMillis
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.jobdri.jobdri_api.domain.analysis.dto.worker;
package com.jobdri.jobdri_api.domain.analysis.dto.internal.worker;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
Expand Down
Loading
Loading