From b0b78b6c7b4eb836509a564d109c95f9ca751e7a Mon Sep 17 00:00:00 2001 From: Boyeon-Shin Date: Wed, 6 May 2026 02:48:47 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20handle=20=ED=8A=B8=EB=9E=9C?= =?UTF-8?q?=EC=9E=AD=EC=85=98=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20SessionPe?= =?UTF-8?q?rsistenceService=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/AllAnalysisCompletedHandler.java | 12 +++------ .../service/SessionPersistenceService.java | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 src/main/java/io/wisoft/prepair/prepair_api/interview/session/service/SessionPersistenceService.java diff --git a/src/main/java/io/wisoft/prepair/prepair_api/interview/answer/event/AllAnalysisCompletedHandler.java b/src/main/java/io/wisoft/prepair/prepair_api/interview/answer/event/AllAnalysisCompletedHandler.java index 03ee01c..ab1925e 100644 --- a/src/main/java/io/wisoft/prepair/prepair_api/interview/answer/event/AllAnalysisCompletedHandler.java +++ b/src/main/java/io/wisoft/prepair/prepair_api/interview/answer/event/AllAnalysisCompletedHandler.java @@ -13,14 +13,13 @@ import io.wisoft.prepair.prepair_api.interview.question.entity.InterviewQuestion; import io.wisoft.prepair.prepair_api.interview.question.repository.QuestionRepository; import io.wisoft.prepair.prepair_api.interview.session.entity.InterviewSession; -import io.wisoft.prepair.prepair_api.interview.session.repository.SessionRepository; +import io.wisoft.prepair.prepair_api.interview.session.service.SessionPersistenceService; import io.wisoft.prepair.prepair_api.common.support.SseEmitterManager; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.nio.file.Files; @@ -42,12 +41,11 @@ public class AllAnalysisCompletedHandler { private final AnswerPersistenceService answerPersistenceService; private final AnswerRepository answerRepository; private final QuestionRepository questionRepository; - private final SessionRepository sessionRepository; + private final SessionPersistenceService sessionPersistenceService; private final SseEmitterManager sseEmitterManager; @Async("videoTaskExecutor") @EventListener - @Transactional public void handle(AllAnalysisCompletedEvent event) { UUID answerId = event.answerId(); deleteTempFile(event.videoPath()); @@ -201,8 +199,7 @@ private FinalFeedbackData buildFinalData( private void completeSession(InterviewSession session, FinalFeedbackData data, FinalFeedbackResult finalResult) { UUID sessionId = session.getId(); - session.complete(data.finalScore(), finalResult.finalFeedback()); - sessionRepository.save(session); + sessionPersistenceService.saveCompletedSession(session, data.finalScore(), finalResult.finalFeedback()); FinalFeedbackResponse response = new FinalFeedbackResponse( sessionId, @@ -222,8 +219,7 @@ private void failSession(UUID answerId, String message) { if (answer == null || answer.getInterviewQuestion().getInterviewSession() == null) return; InterviewSession session = answer.getInterviewQuestion().getInterviewSession(); - session.fail(); - sessionRepository.save(session); + sessionPersistenceService.saveFailedSession(session); sseEmitterManager.send(session.getId(), "analysis-failed", Map.of("message", message)); sseEmitterManager.complete(session.getId()); diff --git a/src/main/java/io/wisoft/prepair/prepair_api/interview/session/service/SessionPersistenceService.java b/src/main/java/io/wisoft/prepair/prepair_api/interview/session/service/SessionPersistenceService.java new file mode 100644 index 0000000..bc00754 --- /dev/null +++ b/src/main/java/io/wisoft/prepair/prepair_api/interview/session/service/SessionPersistenceService.java @@ -0,0 +1,26 @@ +package io.wisoft.prepair.prepair_api.interview.session.service; + +import io.wisoft.prepair.prepair_api.interview.session.entity.InterviewSession; +import io.wisoft.prepair.prepair_api.interview.session.repository.SessionRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class SessionPersistenceService { + + private final SessionRepository sessionRepository; + + @Transactional + public void saveCompletedSession(InterviewSession session, int finalScore, String finalFeedback) { + session.complete(finalScore, finalFeedback); + sessionRepository.save(session); + } + + @Transactional + public void saveFailedSession(InterviewSession session) { + session.fail(); + sessionRepository.save(session); + } +}