1111import io .wisoft .prepair .prepair_api .interview .answer .entity .InterviewFeedback ;
1212import io .wisoft .prepair .prepair_api .interview .answer .repository .AnswerRepository ;
1313import io .wisoft .prepair .prepair_api .interview .answer .repository .FeedbackRepository ;
14- import io .wisoft .prepair .prepair_api .interview .question .entity .InterviewQuestion ;
15- import io .wisoft .prepair .prepair_api .interview .question .repository .QuestionRepository ;
14+ import io .wisoft .prepair .prepair_api .interview .session .dto .response .SessionDetailResponse ;
1615import io .wisoft .prepair .prepair_api .interview .session .entity .InterviewSession ;
1716import io .wisoft .prepair .prepair_api .interview .session .notifier .SessionCompletionNotifier ;
18- import io .wisoft .prepair .prepair_api .interview .session .service .SessionPersistenceService ;
17+ import io .wisoft .prepair .prepair_api .interview .session .service .SessionService ;
1918import lombok .RequiredArgsConstructor ;
2019import lombok .extern .slf4j .Slf4j ;
2120import org .springframework .stereotype .Service ;
2221
2322import java .util .ArrayList ;
2423import java .util .List ;
25- import java .util .Map ;
2624import java .util .UUID ;
27- import java .util .stream .Collectors ;
2825
2926@ Slf4j
3027@ Service
@@ -33,10 +30,9 @@ public class AnalysisCompletionService {
3330
3431 private final AnswerRepository answerRepository ;
3532 private final FeedbackRepository feedbackRepository ;
36- private final QuestionRepository questionRepository ;
3733 private final FeedbackGenerator feedbackGenerator ;
3834 private final AnswerPersistenceService answerPersistenceService ;
39- private final SessionPersistenceService sessionPersistenceService ;
35+ private final SessionService sessionService ;
4036 private final SessionCompletionNotifier completionNotifier ;
4137
4238 public void processAnalysisCompletion (UUID answerId ) {
@@ -91,7 +87,7 @@ public void failSession(UUID answerId, String message) {
9187 return ;
9288 }
9389
94- sessionPersistenceService .saveFailedSession (session .getId ());
90+ sessionService .saveFailedSession (session .getId ());
9591 completionNotifier .notifyFailure (session .getId (), message );
9692 }
9793
@@ -127,7 +123,7 @@ private void completeSession(
127123 FinalFeedbackData data ,
128124 FinalFeedbackResult finalResult
129125 ) {
130- sessionPersistenceService .saveCompletedSession (sessionId , data .finalScore (), finalResult .finalFeedback ());
126+ sessionService .saveCompletedSession (sessionId , data .finalScore (), finalResult .finalFeedback ());
131127
132128 FinalFeedbackResponse response = new FinalFeedbackResponse (
133129 sessionId ,
@@ -142,60 +138,29 @@ private void completeSession(
142138 }
143139
144140 private FinalFeedbackData buildFinalData (UUID sessionId ) {
145- List <InterviewQuestion > questions = questionRepository .findByInterviewSessionId (sessionId );
146- Map <UUID , InterviewAnswer > answerMap = getAnswerMap (sessionId );
147- Map <UUID , List <InterviewFeedback >> feedbackMap = getFeedbackMap (sessionId );
141+ List <SessionDetailResponse .QuestionFeedback > aggregated = sessionService .buildQuestionFeedbacks (sessionId );
148142
149143 List <FinalFeedbackResponse .QuestionFeedback > questionFeedbacks = new ArrayList <>();
150144 int totalScore = 0 ;
151145
152- for (InterviewQuestion question : questions ) {
153- InterviewAnswer answer = answerMap .get (question .getId ());
154- if (answer == null ) continue ;
155-
156- List <InterviewFeedback > answerFeedbacks = feedbackMap .getOrDefault (answer .getId (), List .of ());
157- InterviewFeedback combined = findOptionalFeedback (answerFeedbacks , FeedbackType .COMBINED );
158-
159- if (combined == null ) continue ;
146+ for (SessionDetailResponse .QuestionFeedback qf : aggregated ) {
147+ if (qf .combinedScore () == null ) continue ;
160148
161149 questionFeedbacks .add (new FinalFeedbackResponse .QuestionFeedback (
162- question . getId (),
163- question . getQuestion (),
164- combined . getScore (),
165- combined . getFeedback (),
166- getFeedbackText ( answerFeedbacks , FeedbackType . STT ),
167- getFeedbackText ( answerFeedbacks , FeedbackType . VIDEO )
150+ qf . questionId (),
151+ qf . question (),
152+ qf . combinedScore (),
153+ qf . combinedFeedback (),
154+ qf . sttFeedback ( ),
155+ qf . videoFeedback ( )
168156 ));
169-
170- totalScore += combined .getScore ();
157+ totalScore += qf .combinedScore ();
171158 }
172159
173160 int finalScore = calculateAverageScore (totalScore , questionFeedbacks .size ());
174161 return new FinalFeedbackData (questionFeedbacks , finalScore );
175162 }
176163
177- private Map <UUID , InterviewAnswer > getAnswerMap (UUID sessionId ) {
178- return answerRepository .findBySessionId (sessionId ).stream ()
179- .collect (Collectors .toMap (a -> a .getInterviewQuestion ().getId (), a -> a ));
180- }
181-
182- private Map <UUID , List <InterviewFeedback >> getFeedbackMap (UUID sessionId ) {
183- return feedbackRepository .findAllBySessionId (sessionId ).stream ()
184- .collect (Collectors .groupingBy (f -> f .getInterviewAnswer ().getId ()));
185- }
186-
187- private InterviewFeedback findOptionalFeedback (List <InterviewFeedback > feedbacks , FeedbackType type ) {
188- return feedbacks .stream ()
189- .filter (f -> f .getFeedbackType () == type )
190- .findFirst ()
191- .orElse (null );
192- }
193-
194- private String getFeedbackText (List <InterviewFeedback > feedbacks , FeedbackType type ) {
195- InterviewFeedback feedback = findOptionalFeedback (feedbacks , type );
196- return feedback == null ? null : feedback .getFeedback ();
197- }
198-
199164 private int calculateAverageScore (int totalScore , int count ) {
200165 if (count == 0 ) {
201166 return 0 ;
0 commit comments