diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisEntityConverter.java b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisEntityConverter.java index bb686119..8d116831 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisEntityConverter.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisEntityConverter.java @@ -98,4 +98,18 @@ public static IdeaAnalysisPageResponseDto toPageResponseDto( .pageInfo(pageInfo) .build(); } + public static IdeaAnalysisPageResponseDto toEmptyPageResponseDto(Page analysisPage) { + IdeaAnalysisPageResponseDto.PageInfo pageInfo = IdeaAnalysisPageResponseDto.PageInfo.builder() + .currentPage(analysisPage.getNumber()) + .totalPages(0) + .totalElements(0L) + .hasNext(false) + .hasPrevious(false) + .build(); + + return IdeaAnalysisPageResponseDto.builder() + .analysis(null) + .pageInfo(pageInfo) + .build(); + } } diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java index 3813fe13..d62418f1 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisRequestConverter.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.time.LocalDate; import java.util.HashMap; import java.util.Map; @@ -62,6 +63,7 @@ private String buildPrompt(IdeaAnalysisRequestDto dto) { variables.put("technicalChallenges", dto.getTechnicalChallenges()); variables.put("targetCompletionDate", dto.getTargetCompletionDate() != null ? dto.getTargetCompletionDate().toString() : "미정"); + variables.put("today", LocalDate.now().toString()); return promptLoader.loadPrompt(PROMPT_PATH, variables); } diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java index dd69d426..e4e99a54 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/converter/IdeaAnalysisSchemaBuilder.java @@ -19,7 +19,6 @@ public Map buildIdeaAnalysisSchema() { .filter(rf -> rf.getRole() != Role.OTHER) .map(Enum::name) .collect(Collectors.toList()); - return Map.of( "type", "object", "properties", Map.of( diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/service/IdeaAnalysisService.java b/nect-api/src/main/java/com/nect/api/domain/analysis/service/IdeaAnalysisService.java index e987e121..d319ab82 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/service/IdeaAnalysisService.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/service/IdeaAnalysisService.java @@ -205,10 +205,7 @@ public IdeaAnalysisPageResponseDto getAnalysisPage(Long userId, int page) { projectIdeaAnalysisRepository.findByUserIdOrderByCreatedAtDesc(userId, pageable); if (analysisPage.isEmpty()) { - throw new IdeaAnalysisException( - IdeaAnalysisErrorCode.ANALYSIS_FAILED, - "분석서를 찾을 수 없습니다." - ); + return IdeaAnalysisEntityConverter.toEmptyPageResponseDto(analysisPage); } ProjectIdeaAnalysis analysis = analysisPage.getContent().get(0); diff --git a/nect-api/src/main/java/com/nect/api/domain/analysis/util/PromptLoader.java b/nect-api/src/main/java/com/nect/api/domain/analysis/util/PromptLoader.java index a5a14396..528d481d 100644 --- a/nect-api/src/main/java/com/nect/api/domain/analysis/util/PromptLoader.java +++ b/nect-api/src/main/java/com/nect/api/domain/analysis/util/PromptLoader.java @@ -1,7 +1,6 @@ package com.nect.api.domain.analysis.util; -import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; import org.springframework.util.StreamUtils; @@ -11,7 +10,7 @@ import java.nio.file.Files; import java.util.Map; -@Slf4j + @Component public class PromptLoader { @@ -28,7 +27,7 @@ public String loadPrompt(String promptPath, Map variables) { String value = entry.getValue() != null ? entry.getValue() : ""; result = result.replace(placeholder, value); } - log.info("빌드된 프롬프트 앞부분: {}", result.substring(0, Math.min(500, result.length()))); + return result; } catch (IOException e) { diff --git a/nect-api/src/main/resources/prompts/idea-analysis.txt b/nect-api/src/main/resources/prompts/idea-analysis.txt index 1ae7e065..628c835e 100644 --- a/nect-api/src/main/resources/prompts/idea-analysis.txt +++ b/nect-api/src/main/resources/prompts/idea-analysis.txt @@ -14,6 +14,12 @@ - 목표 완료일: {{targetCompletionDate}} --- +## 분석 규칙 +- 오늘 날짜는 {{today}}입니다. +- total_weeks는 반드시 8주 이상 12주 이하로 설정하세요. + +--- +- total_weeks는 반드시 8주 이상 12주 이하로 설정하세요. 5. **주차별 로드맵**: - **⚠️ 중요: total_weeks 값만큼 정확히 모든 주차의 로드맵을 생성해야 합니다.** - **예: total_weeks가 12라면 week_number 1부터 12까지 총 12개의 로드맵 객체를 생성하세요.**