Skip to content

Commit 2bb4eeb

Browse files
committed
fix: SessionPersistenceService 트랜잭션 내 엔티티 재조회 및 중복 실행 방지
1 parent b0b78b6 commit 2bb4eeb

2 files changed

Lines changed: 21 additions & 6 deletions

File tree

src/main/java/io/wisoft/prepair/prepair_api/interview/answer/event/AllAnalysisCompletedHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ private FinalFeedbackData buildFinalData(
199199
private void completeSession(InterviewSession session, FinalFeedbackData data, FinalFeedbackResult finalResult) {
200200
UUID sessionId = session.getId();
201201

202-
sessionPersistenceService.saveCompletedSession(session, data.finalScore(), finalResult.finalFeedback());
202+
sessionPersistenceService.saveCompletedSession(sessionId, data.finalScore(), finalResult.finalFeedback());
203203

204204
FinalFeedbackResponse response = new FinalFeedbackResponse(
205205
sessionId,
@@ -219,7 +219,7 @@ private void failSession(UUID answerId, String message) {
219219
if (answer == null || answer.getInterviewQuestion().getInterviewSession() == null) return;
220220

221221
InterviewSession session = answer.getInterviewQuestion().getInterviewSession();
222-
sessionPersistenceService.saveFailedSession(session);
222+
sessionPersistenceService.saveFailedSession(session.getId());
223223

224224
sseEmitterManager.send(session.getId(), "analysis-failed", Map.of("message", message));
225225
sseEmitterManager.complete(session.getId());
Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
11
package io.wisoft.prepair.prepair_api.interview.session.service;
22

33
import io.wisoft.prepair.prepair_api.interview.session.entity.InterviewSession;
4+
import io.wisoft.prepair.prepair_api.interview.session.entity.SessionStatus;
45
import io.wisoft.prepair.prepair_api.interview.session.repository.SessionRepository;
56
import lombok.RequiredArgsConstructor;
67
import org.springframework.stereotype.Service;
78
import org.springframework.transaction.annotation.Transactional;
89

10+
import java.util.UUID;
11+
912
@Service
1013
@RequiredArgsConstructor
1114
public class SessionPersistenceService {
1215

1316
private final SessionRepository sessionRepository;
1417

1518
@Transactional
16-
public void saveCompletedSession(InterviewSession session, int finalScore, String finalFeedback) {
19+
public void saveCompletedSession(UUID sessionId, int finalScore, String finalFeedback) {
20+
InterviewSession session = sessionRepository.findById(sessionId)
21+
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 세션입니다."));
22+
23+
if (session.getStatus() == SessionStatus.COMPLETED) {
24+
return;
25+
}
26+
1727
session.complete(finalScore, finalFeedback);
18-
sessionRepository.save(session);
1928
}
2029

2130
@Transactional
22-
public void saveFailedSession(InterviewSession session) {
31+
public void saveFailedSession(UUID sessionId) {
32+
InterviewSession session = sessionRepository.findById(sessionId)
33+
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 세션입니다."));
34+
35+
if (session.getStatus() != SessionStatus.IN_PROGRESS) {
36+
return;
37+
}
38+
2339
session.fail();
24-
sessionRepository.save(session);
2540
}
2641
}

0 commit comments

Comments
 (0)