Skip to content

Commit 9d36bbc

Browse files
committed
fix: 명확하게 비동기를 통해 트랙잭션 처리하도록 수정 (WR9-144) #248
1 parent 1f3f31c commit 9d36bbc

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/main/java/io/crops/warmletter/domain/report/service/ReportService.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.crops.warmletter.domain.report.dto.response.ReportsResponse;
1818
import io.crops.warmletter.domain.report.dto.response.UpdateReportResponse;
1919
import io.crops.warmletter.domain.report.entity.Report;
20+
import io.crops.warmletter.domain.report.enums.ReasonType;
2021
import io.crops.warmletter.domain.report.enums.ReportStatus;
2122
import io.crops.warmletter.domain.report.enums.ReportType;
2223
import io.crops.warmletter.domain.report.exception.DuplicateReportException;
@@ -30,20 +31,19 @@
3031
import io.crops.warmletter.domain.share.repository.ShareProposalRepository;
3132
import io.crops.warmletter.domain.timeline.dto.request.NotificationRequest;
3233
import io.crops.warmletter.domain.timeline.enums.AlarmType;
33-
import io.crops.warmletter.domain.timeline.facade.NotificationFacade;
3434
import jakarta.transaction.Transactional;
3535
import lombok.RequiredArgsConstructor;
3636
import org.springframework.context.ApplicationEventPublisher;
3737
import org.springframework.data.domain.Page;
3838
import org.springframework.data.domain.Pageable;
39+
import org.springframework.scheduling.annotation.Async;
3940
import org.springframework.stereotype.Service;
4041

4142
import java.time.LocalDateTime;
4243
import java.util.HashMap;
4344
import java.util.List;
4445
import java.util.Map;
4546
import java.util.Optional;
46-
import java.util.concurrent.CompletableFuture;
4747

4848
@Service
4949
@RequiredArgsConstructor
@@ -101,6 +101,7 @@ public Page<ReportsResponse> getAllReports(String reportType, String status, Pag
101101
@Transactional
102102
public ReportResponse createReport(CreateReportRequest request) {
103103
Long memberId = authFacde.getCurrentUserId();
104+
//Long memberId = 1L;
104105
Map<String, String> reportedContentMap = new HashMap<>();
105106
validateRequest(request, memberId, reportedContentMap);
106107
String reportedContent = reportedContentMap.get("content");
@@ -124,13 +125,19 @@ public ReportResponse createReport(CreateReportRequest request) {
124125
}
125126
Report report = builder.build();
126127
Report savedReport = reportRepository.save(report);
127-
CompletableFuture.runAsync(() -> {
128-
Map<String, String> moderationResult = reportModerationService.moderateText(reportedContent, request.getReasonType(), request.getReason());
129-
updateReportWithAIResult(savedReport.getId(), moderationResult);
130-
});
128+
129+
processReportInBackground(savedReport.getId(), reportedContent, request.getReasonType(), request.getReason());
130+
131131
return new ReportResponse(savedReport);
132132
}
133133

134+
// 신고 AI 판별 비동기 처리
135+
@Async
136+
public void processReportInBackground(Long reportId, String reportedContent, ReasonType reasonType, String reason) {
137+
Map<String, String> moderationResult = reportModerationService.moderateText(reportedContent, reasonType, reason);
138+
updateReportWithAIResult(reportId, moderationResult);
139+
}
140+
134141
@Transactional
135142
public void updateReportWithAIResult(Long reportId, Map<String, String> moderationResult) {
136143
Report report = reportRepository.findById(reportId)

0 commit comments

Comments
 (0)