feat : 실행계획 생성 api 수정(선택한 내용만 실행계획 생성하도록 변경)

This commit is contained in:
lsh9672 2025-06-17 10:46:35 +09:00
parent fd000a2d4e
commit 002adbed34
8 changed files with 33 additions and 24 deletions

View File

@ -21,6 +21,7 @@ public class ActionPlan {
private Long id;
private Long storeId;
private Long userId;
private Long feedbackId;
private String title;
private String description;
private String period;

View File

@ -444,9 +444,10 @@ public class AnalyticsService implements AnalyticsUseCase {
// 2. 실행계획 생성 (요청 )
List<String> actionPlans = null;
if (Boolean.TRUE.equals(request.getGenerateActionPlan())) {
actionPlans = aiServicePort.generateActionPlan(aiFeedback);
}
//TODO : 추후에 AI 분석후에 바로 실행계획까지 생성해야 한다면 추가.
// if (Boolean.TRUE.equals(request.getGenerateActionPlan())) {
// actionPlans = aiServicePort.generateActionPlan(aiFeedback);
// }
// 3. 응답 생성
AiAnalysisResponse response = AiAnalysisResponse.builder()
@ -459,7 +460,7 @@ public class AnalyticsService implements AnalyticsUseCase {
.sentimentAnalysis(aiFeedback.getSentimentAnalysis())
.confidenceScore(aiFeedback.getConfidenceScore())
.totalReviewsAnalyzed(getTotalReviewsCount(storeId, request.getDays()))
.actionPlans(actionPlans)
.actionPlans(actionPlans) //TODO : 사용하는 값은 아니지만 의존성을 위해 그대로 , 추후에 변경 필요.
.analyzedAt(aiFeedback.getGeneratedAt())
.build();
@ -474,7 +475,7 @@ public class AnalyticsService implements AnalyticsUseCase {
@Override
@Transactional
public List<String> generateActionPlansFromFeedback(Long feedbackId) {
public List<String> generateActionPlansFromFeedback(ActionPlanCreateRequest request, Long feedbackId) {
log.info("실행계획 생성: feedbackId={}", feedbackId);
try {
@ -487,7 +488,7 @@ public class AnalyticsService implements AnalyticsUseCase {
AiFeedback feedback = aiFeedback.get();
// 2. 기존 AIServicePort.generateActionPlan 메서드 활용
List<String> actionPlans = aiServicePort.generateActionPlan(aiFeedback.get());
List<String> actionPlans = aiServicePort.generateActionPlan(request.getActionPlanSelect(), aiFeedback.get());
// 3. DB에 실행계획 저장
@ -593,7 +594,8 @@ public class AnalyticsService implements AnalyticsUseCase {
// ActionPlan 도메인 객체 생성 (기존 ActionPlanService의 패턴과 동일하게)
ActionPlan actionPlan = ActionPlan.builder()
.storeId(feedback.getStoreId())
.userId(1L) // AI가 생성한 계획이므로 userId는 null
.userId(0L) // AI가 생성한 계획이므로 userId는 0
.feedbackId(feedback.getId())
.title("AI 추천 실행계획 " + (i + 1))
.description(planContent)
.period("1개월") // 기본 실행 기간

View File

@ -44,6 +44,6 @@ public interface AnalyticsUseCase {
/**
* AI 피드백 기반 실행계획 생성
*/
List<String> generateActionPlansFromFeedback(Long feedbackId);
List<String> generateActionPlansFromFeedback(ActionPlanCreateRequest request,Long feedbackId);
}

View File

@ -24,5 +24,5 @@ public interface AIServicePort {
/**
* 실행 계획 생성
*/
List<String> generateActionPlan(AiFeedback feedback);
List<String> generateActionPlan(List<String> actionPlanSelect, AiFeedback feedback);
}

View File

@ -154,10 +154,8 @@ public class AnalyticsController {
log.info("실행계획 바디 데이터 => {}", request);
List<String> actionPlans = analyticsUseCase.generateActionPlansFromFeedback(request,feedbackId);
return ResponseEntity.ok(SuccessResponse.of("실행계획 생성 완료"));
// List<String> actionPlans = analyticsUseCase.generateActionPlansFromFeedback(feedbackId);
// return ResponseEntity.ok(SuccessResponse.of(actionPlans, "실행계획 생성 완료"));
}
}

View File

@ -125,25 +125,30 @@ public class AIServiceAdapter implements AIServicePort {
}
@Override
public List<String> generateActionPlan(AiFeedback feedback) {
public List<String> generateActionPlan(List<String> actionPlanSelect, AiFeedback feedback) {
log.info("OpenAI 실행 계획 생성 시작");
try {
StringBuffer planFormat = new StringBuffer();
for(int i = 1; i <= actionPlanSelect.size(); i++) {
planFormat.append(i).append(" [구체적인 실행 계획 ").append(i).append("]\n");
}
String prompt = String.format(
"""
다음 AI 피드백을 바탕으로 구체적인 실행 계획 3개를 생성해주세요.
다음 AI 피드백을 바탕으로 구체적인 실행 계획 %s개를 생성해주세요.
계획은 실행 가능하고 구체적이어야 합니다.
요약: %s
개선점: %s
실행계획 내용은 점주가 반영할 있도록 구체적어야 합니다.
실행 계획을 다음 형식으로 작성해주세요:
1. [구체적인 실행 계획 1]
2. [구체적인 실행 계획 2]
3. [구체적인 실행 계획 3]
%s
""",
actionPlanSelect.size(),
feedback.getSummary(),
String.join(", ", feedback.getImprovementPoints())
String.join(", ", actionPlanSelect),
planFormat
);
String result = callOpenAI(prompt);
@ -151,10 +156,9 @@ public class AIServiceAdapter implements AIServicePort {
} catch (Exception e) {
log.error("OpenAI 실행 계획 생성 중 오류 발생", e);
//TODO : 시연을 위해서 우선은 아래과 같이 처리, 추후에는 실행계획이 실패했다면 Runtime계열의 예외를 던지는게 좋을듯.
return Arrays.asList(
"서비스 품질 개선을 위한 직원 교육 실시",
"고객 피드백 수집 체계 구축",
"매장 운영 프로세스 개선"
"실행계획 생성 실패. 재생성 필요"
);
}
}

View File

@ -79,6 +79,7 @@ public class ActionPlanRepositoryAdapter implements ActionPlanPort {
private ActionPlanEntity toEntity(ActionPlan domain) {
return ActionPlanEntity.builder()
.id(domain.getId())
.feedbackId(domain.getFeedbackId())
.storeId(domain.getStoreId())
.userId(domain.getUserId())
.title(domain.getTitle())

View File

@ -49,7 +49,10 @@ public class ActionPlanEntity {
@Column(name = "user_id", nullable = false)
private Long userId;
@Column(name = "feedback_id", nullable = true)
private Long feedbackId;
@Column(name = "title", nullable = false, length = 100)
private String title;