77import java .util .List ;
88import java .util .UUID ;
99
10+ import org .layer .domain .actionItem .entity .ActionItem ;
11+ import org .layer .domain .actionItem .repository .ActionItemRepository ;
1012import org .layer .domain .analyze .entity .Analyze ;
1113import org .layer .domain .analyze .entity .AnalyzeDetail ;
1214import org .layer .domain .analyze .enums .AnalyzeDetailType ;
2123import org .layer .domain .retrospect .entity .AnalysisStatus ;
2224import org .layer .domain .retrospect .entity .Retrospect ;
2325import org .layer .domain .retrospect .repository .RetrospectRepository ;
26+ import org .layer .domain .space .entity .Space ;
2427import org .layer .domain .space .entity .Team ;
2528import org .layer .domain .space .repository .MemberSpaceRelationRepository ;
2629import org .layer .ai .dto .response .OpenAIResponse ;
30+ import org .layer .domain .space .repository .SpaceRepository ;
2731import org .springframework .data .redis .core .RedisTemplate ;
2832import org .springframework .scheduling .annotation .Async ;
2933import org .springframework .stereotype .Service ;
@@ -39,11 +43,13 @@ public class AIAnalyzeService {
3943 private static final int FIRST_RANK = 1 ;
4044 private static final String RETROSPECT_LOCK_KEY = "retrospect:lock:" ;
4145
46+ private final SpaceRepository spaceRepository ;
4247 private final RetrospectRepository retrospectRepository ;
4348 private final AnalyzeRepository analyzeRepository ;
4449 private final QuestionRepository questionRepository ;
4550 private final AnswerRepository answerRepository ;
4651 private final MemberSpaceRelationRepository memberSpaceRelationRepository ;
52+ private final ActionItemRepository actionItemRepository ;
4753
4854 private final OpenAIService openAIService ;
4955
@@ -74,8 +80,10 @@ public void createAnalyze(Long retrospectId) {
7480 retrospect .validateAnalysisStatusIsNotDone ();
7581
7682 // 답변 조회
77- Questions questions = new Questions (questionRepository .findAllByRetrospectIdOrderByQuestionOrder (retrospectId ));
78- Answers answers = new Answers (answerRepository .findAllByRetrospectIdAndAnswerStatus (retrospectId , AnswerStatus .DONE ));
83+ Questions questions = new Questions (
84+ questionRepository .findAllByRetrospectIdOrderByQuestionOrder (retrospectId ));
85+ Answers answers = new Answers (
86+ answerRepository .findAllByRetrospectIdAndAnswerStatus (retrospectId , AnswerStatus .DONE ));
7987
8088 Long rangeQuestionId = questions .extractEssentialQuestionIdBy (QuestionType .RANGER );
8189 Long numberQuestionId = questions .extractEssentialQuestionIdBy (QuestionType .NUMBER );
@@ -85,9 +93,20 @@ public void createAnalyze(Long retrospectId) {
8593 OpenAIResponse aiResponse = openAIService .createAnalyze (totalAnswer );
8694 OpenAIResponse .Content content = aiResponse .parseContent ();
8795
88- Analyze teamAnalyze = getAnalyzeEntity (retrospectId , answers , rangeQuestionId , numberQuestionId , content , null , AnalyzeType .TEAM );
96+ Analyze teamAnalyze = getAnalyzeEntity (retrospectId , answers , rangeQuestionId , numberQuestionId , content ,
97+ null , AnalyzeType .TEAM );
8998 analyzeRepository .save (teamAnalyze );
9099
100+
101+ // 팀 실행 목표 생성
102+ Space space = spaceRepository .findByIdOrThrow (retrospect .getSpaceId ());
103+
104+ List <ActionItem > actionItems = createActionItemsFromAnalyzeDetails (
105+ teamAnalyze .getAnalyzeDetailsBy (AnalyzeDetailType .IMPROVEMENT ),
106+ retrospect .getSpaceId (),
107+ retrospect .getId (), space .getLeaderId ());
108+ actionItemRepository .saveAll (actionItems );
109+
91110 // 팀원 개인마다의 분석 요청
92111 Team team = new Team (memberSpaceRelationRepository .findAllBySpaceId (retrospect .getSpaceId ()));
93112
@@ -96,7 +115,8 @@ public void createAnalyze(Long retrospectId) {
96115 String individualAnswer = answers .getIndividualAnswer (rangeQuestionId , numberQuestionId , memberId );
97116 OpenAIResponse aiIndividualResponse = openAIService .createAnalyze (individualAnswer );
98117 OpenAIResponse .Content individualContent = aiIndividualResponse .parseContent ();
99- return getAnalyzeEntity (retrospectId , answers , rangeQuestionId , numberQuestionId , individualContent , memberId , AnalyzeType .INDIVIDUAL );
118+ return getAnalyzeEntity (retrospectId , answers , rangeQuestionId , numberQuestionId , individualContent ,
119+ memberId , AnalyzeType .INDIVIDUAL );
100120 })
101121 .toList ();
102122 analyzeRepository .saveAll (individualAnalyzes );
@@ -126,11 +146,31 @@ private Analyze getAnalyzeEntity(Long retrospectId, Answers answers, Long rangeQ
126146 List <AnalyzeDetail > analyzeDetails = createAnalyzeDetails (content );
127147
128148 return createAnalyzeEntity (retrospectId , memberId , answers .getScoreCount (numberQuestionId , SCORE_ONE , memberId ),
129- answers .getScoreCount (numberQuestionId , SCORE_TWO , memberId ), answers .getScoreCount (numberQuestionId , SCORE_THREE , memberId ),
130- answers .getScoreCount (numberQuestionId , SCORE_FOUR , memberId ), answers .getScoreCount (numberQuestionId , SCORE_FIVE , memberId ),
149+ answers .getScoreCount (numberQuestionId , SCORE_TWO , memberId ),
150+ answers .getScoreCount (numberQuestionId , SCORE_THREE , memberId ),
151+ answers .getScoreCount (numberQuestionId , SCORE_FOUR , memberId ),
152+ answers .getScoreCount (numberQuestionId , SCORE_FIVE , memberId ),
131153 answers .getGoalCompletionRate (rangeQuestionId ), analyzeType , analyzeDetails );
132154 }
133155
156+ private List <ActionItem > createActionItemsFromAnalyzeDetails (List <AnalyzeDetail > analyzeDetails , Long spaceId ,
157+ Long retrospectId , Long memberId ) {
158+ List <ActionItem > actionItems = new ArrayList <>();
159+ int order = 1 ;
160+ for (AnalyzeDetail detail : analyzeDetails ) {
161+ ActionItem actionItem = ActionItem .builder ()
162+ .retrospectId (retrospectId )
163+ .spaceId (spaceId )
164+ .memberId (memberId )
165+ .content (detail .getContent ())
166+ .actionItemOrder (order )
167+ .build ();
168+ actionItems .add (actionItem );
169+ order ++;
170+ }
171+ return actionItems ;
172+ }
173+
134174 private List <AnalyzeDetail > createAnalyzeDetails (OpenAIResponse .Content content ) {
135175 List <AnalyzeDetail > analyzeDetails = new ArrayList <>();
136176
@@ -162,7 +202,8 @@ private List<AnalyzeDetail> createAnalyzeDetail(List<OpenAIResponse.ContentDetai
162202 return analyzeDetails ;
163203 }
164204
165- private Analyze createAnalyzeEntity (Long retrospectId , Long memberId ,int scoreOne , int scoreTwo , int scoreThree , int scoreFour ,
205+ private Analyze createAnalyzeEntity (Long retrospectId , Long memberId , int scoreOne , int scoreTwo , int scoreThree ,
206+ int scoreFour ,
166207 int scoreFive , int goalCompletionRate , AnalyzeType analyzeType , List <AnalyzeDetail > analyzeDetails ) {
167208
168209 return Analyze .builder ()
0 commit comments