1717import io .crops .warmletter .domain .report .dto .response .ReportsResponse ;
1818import io .crops .warmletter .domain .report .dto .response .UpdateReportResponse ;
1919import io .crops .warmletter .domain .report .entity .Report ;
20+ import io .crops .warmletter .domain .report .enums .ReasonType ;
2021import io .crops .warmletter .domain .report .enums .ReportStatus ;
2122import io .crops .warmletter .domain .report .enums .ReportType ;
2223import io .crops .warmletter .domain .report .exception .DuplicateReportException ;
3031import io .crops .warmletter .domain .share .repository .ShareProposalRepository ;
3132import io .crops .warmletter .domain .timeline .dto .request .NotificationRequest ;
3233import io .crops .warmletter .domain .timeline .enums .AlarmType ;
33- import io .crops .warmletter .domain .timeline .facade .NotificationFacade ;
3434import jakarta .transaction .Transactional ;
3535import lombok .RequiredArgsConstructor ;
3636import org .springframework .context .ApplicationEventPublisher ;
3737import org .springframework .data .domain .Page ;
3838import org .springframework .data .domain .Pageable ;
39+ import org .springframework .scheduling .annotation .Async ;
3940import org .springframework .stereotype .Service ;
4041
4142import java .time .LocalDateTime ;
4243import java .util .HashMap ;
4344import java .util .List ;
4445import java .util .Map ;
4546import 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