@@ -302,4 +302,44 @@ public DefaultResponse<?> editReply(Long replyId, ReplyUpdateForm form, HttpServ
302
302
return new DefaultResponse <>(StatusCode .SUCCESS , ResponseMessage .REPLY_EDIT_SUCCESS , replyDto );
303
303
}
304
304
305
+ @ Transactional
306
+ public DefaultResponse <?> deleteReply (Long replyId , HttpServletRequest request ) {
307
+ String token = tokenProvider .parseToken (request );
308
+ Long userId ;
309
+ if (tokenProvider .validateToken (token )) {
310
+ userId = tokenProvider .getUserId (token );
311
+ } else {
312
+ return new DefaultResponse <>(StatusCode .FAIL_AUTH , ResponseMessage .NOT_FOUND_USER );
313
+ }
314
+ Optional <User > userOptional = userRepository .findById (userId );
315
+ if (userOptional .isEmpty ()) {
316
+ return new DefaultResponse <>(StatusCode .NOT_EXIST , ResponseMessage .NOT_FOUND_USER );
317
+ }
318
+ User user = userOptional .get ();
319
+
320
+ Optional <Reply > replyOptional = replyRepository .findById (replyId );
321
+ if (replyOptional .isEmpty ()) {
322
+ return new DefaultResponse <>(StatusCode .NOT_EXIST , ResponseMessage .NOT_FOUND_REPLY );
323
+ }
324
+ Reply reply = replyOptional .get ();
325
+
326
+ // 작성자 확인
327
+ if (isNotSameUser (user , reply .getUser ())) {
328
+ return new DefaultResponse <>(StatusCode .CONDITION_FAIL , ResponseMessage .NOT_SAME_USER );
329
+ }
330
+
331
+ // 채택된 답변인지 확인
332
+ if (reply .getStatus () == ReplyStatus .SELECTED ) {
333
+ return new DefaultResponse <>(StatusCode .CONDITION_FAIL , ResponseMessage .CANNOT_DELETE_SELECTED );
334
+ }
335
+
336
+ // 리플 작성자 경험치 삭제
337
+ user .changeExp (User .ExpChangeType .DELETE_REPLY );
338
+
339
+ // 댓글 상태변경 DELETED 후 저장
340
+ reply .setStatus (ReplyStatus .DELETED );
341
+ replyRepository .save (reply );
342
+
343
+ return new DefaultResponse <>(StatusCode .SUCCESS , ResponseMessage .REPLY_DELETE_SUCCESS );
344
+ }
305
345
}
0 commit comments