diff --git a/src/main/java/com/jobdri/jobdri_api/domain/jobposting/controller/MockJobPostingController.java b/src/main/java/com/jobdri/jobdri_api/domain/jobposting/controller/MockJobPostingController.java index 6b2e9a6..6fb856c 100644 --- a/src/main/java/com/jobdri/jobdri_api/domain/jobposting/controller/MockJobPostingController.java +++ b/src/main/java/com/jobdri/jobdri_api/domain/jobposting/controller/MockJobPostingController.java @@ -13,9 +13,11 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @@ -48,8 +50,31 @@ public ApiResponse generateMockJobPosting( summary = "모의 공고 추천 질문 조회", description = "선택한 회사/직무 기준으로 모의 공고 추천 질문을 조회합니다. 질문은 직무 기준 캐시를 재사용합니다." ) - @PostMapping("/questions") + @GetMapping("/questions") public ApiResponse getMockRecommendedQuestions( + @AuthenticationPrincipal UserDetailsImpl userDetails, + @RequestParam Long companyId, + @RequestParam Long middleClassificationId, + @RequestParam Long detailClassificationId + ) { + validateAuthenticatedUser(userDetails); + JobPostingMockGenerateRequest request = new JobPostingMockGenerateRequest( + companyId, + middleClassificationId, + detailClassificationId + ); + return ApiResponse.onSuccess( + "모의 공고 추천 질문 조회에 성공했습니다.", + new JobPostingMockQuestionResponse(mockQuestionCacheService.getRecommendedQuestions(request)) + ); + } + + @Operation( + summary = "모의 공고 추천 질문 조회", + description = "선택한 회사/직무 기준으로 모의 공고 추천 질문을 조회합니다. 하위 호환을 위해 POST 요청도 지원합니다." + ) + @PostMapping("/questions") + public ApiResponse getMockRecommendedQuestionsByPost( @AuthenticationPrincipal UserDetailsImpl userDetails, @Valid @RequestBody JobPostingMockGenerateRequest request ) { diff --git a/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingAiService.java b/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingAiService.java index f6fbf32..5e27ef3 100644 --- a/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingAiService.java +++ b/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingAiService.java @@ -126,7 +126,7 @@ public JobPostingMockQuestionResponse generateMockRecommendedQuestions( var params = ResponseCreateParams.builder() .model(extractionModel) - .input(buildMockQuestionPrompt(request, detailClassification, retrievalContext)) + .input(buildMockQuestionPrompt(company, request, detailClassification, retrievalContext)) .temperature(0.4) .text(JobPostingMockQuestionResponse.class) .build(); @@ -505,6 +505,7 @@ private String buildMockGenerationPrompt( } private String buildMockQuestionPrompt( + Company company, JobPostingMockGenerateRequest request, DetailClassification detailClassification, RetrievalContext retrievalContext @@ -531,6 +532,11 @@ private String buildMockQuestionPrompt( 3. 질문은 서로 중복되지 않게 작성하세요. 4. 참고 공고가 있으면 직무 맥락과 자주 요구되는 역량을 반영하세요. 5. 참고 공고가 없으면 중분류/소분류명만 기반으로 일반적인 직무 질문을 작성하세요. + 6. 질문에 회사명을 포함해야 한다면 반드시 아래 제공된 회사명만 사용하세요. + 7. 참고 자료에 등장하는 다른 회사명은 절대 질문에 쓰지 마세요. + + [회사명] + %s [중분류 ID] %d @@ -550,6 +556,7 @@ private String buildMockQuestionPrompt( [같은 조건의 유사 자소서 문항 참고 자료] %s """.formatted( + company.getName(), request.middleClassificationId(), middleName, request.detailClassificationId(),