From 2bb4eeb1d53488d3b65a9d449be4cd931dc2a801 Mon Sep 17 00:00:00 2001 From: Boyeon-Shin Date: Wed, 6 May 2026 03:01:54 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20SessionPersistenceService=20=ED=8A=B8?= =?UTF-8?q?=EB=9E=9C=EC=9E=AD=EC=85=98=20=EB=82=B4=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EC=9E=AC=EC=A1=B0=ED=9A=8C=20=EB=B0=8F=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EC=8B=A4=ED=96=89=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/AllAnalysisCompletedHandler.java | 4 ++-- .../service/SessionPersistenceService.java | 23 +++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) 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 ab1925e..6fb59ba 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 @@ -199,7 +199,7 @@ private FinalFeedbackData buildFinalData( private void completeSession(InterviewSession session, FinalFeedbackData data, FinalFeedbackResult finalResult) { UUID sessionId = session.getId(); - sessionPersistenceService.saveCompletedSession(session, data.finalScore(), finalResult.finalFeedback()); + sessionPersistenceService.saveCompletedSession(sessionId, data.finalScore(), finalResult.finalFeedback()); FinalFeedbackResponse response = new FinalFeedbackResponse( sessionId, @@ -219,7 +219,7 @@ private void failSession(UUID answerId, String message) { if (answer == null || answer.getInterviewQuestion().getInterviewSession() == null) return; InterviewSession session = answer.getInterviewQuestion().getInterviewSession(); - sessionPersistenceService.saveFailedSession(session); + sessionPersistenceService.saveFailedSession(session.getId()); 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 index bc00754..ef64a42 100644 --- 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 @@ -1,11 +1,14 @@ 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.entity.SessionStatus; import io.wisoft.prepair.prepair_api.interview.session.repository.SessionRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.UUID; + @Service @RequiredArgsConstructor public class SessionPersistenceService { @@ -13,14 +16,26 @@ public class SessionPersistenceService { private final SessionRepository sessionRepository; @Transactional - public void saveCompletedSession(InterviewSession session, int finalScore, String finalFeedback) { + public void saveCompletedSession(UUID sessionId, int finalScore, String finalFeedback) { + InterviewSession session = sessionRepository.findById(sessionId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 세션입니다.")); + + if (session.getStatus() == SessionStatus.COMPLETED) { + return; + } + session.complete(finalScore, finalFeedback); - sessionRepository.save(session); } @Transactional - public void saveFailedSession(InterviewSession session) { + public void saveFailedSession(UUID sessionId) { + InterviewSession session = sessionRepository.findById(sessionId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 세션입니다.")); + + if (session.getStatus() != SessionStatus.IN_PROGRESS) { + return; + } + session.fail(); - sessionRepository.save(session); } }