Skip to content

Commit 538d458

Browse files
committed
[J2KB-3rd-Season#21]feat: 답변 삭제 추가
1 parent 216746a commit 538d458

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

src/main/java/com/devin/dev/controller/reply/ReplyController.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.devin.dev.controller.reply;
22

3+
import com.devin.dev.controller.post.ReplyUpdateForm;
34
import com.devin.dev.dto.reply.ReplyDto;
45
import com.devin.dev.model.DefaultResponse;
56
import com.devin.dev.service.ReplyService;
@@ -10,6 +11,7 @@
1011
import org.springframework.data.domain.Pageable;
1112
import org.springframework.web.bind.annotation.*;
1213

14+
import javax.servlet.http.HttpServletRequest;
1315
import javax.validation.Valid;
1416
import javax.validation.constraints.NotEmpty;
1517
import java.util.List;
@@ -30,6 +32,11 @@ public DefaultResponse<?> reply(@PathVariable("id") Long replyId, @RequestBody @
3032
return replyService.editReply(replyId, form, request);
3133
}
3234

35+
@DeleteMapping("/reply/{id}")
36+
public DefaultResponse<?> reply(@PathVariable("id") Long replyId, HttpServletRequest request) {
37+
return replyService.deleteReply(replyId, request);
38+
}
39+
3340
@Data
3441
private static class CreateReplyResponse {
3542
private Long id;
@@ -39,18 +46,6 @@ public CreateReplyResponse(Long id) {
3946
}
4047
}
4148

42-
@Data
43-
private static class CreateReplyRequest {
44-
@NotEmpty
45-
private Long postId;
46-
@NotEmpty
47-
private Long userId;
48-
@NotEmpty
49-
private String content;
50-
@NotEmpty
51-
private List<String> replyImages;
52-
}
53-
5449
@Data
5550
@AllArgsConstructor
5651
static class Result<T> {

src/main/java/com/devin/dev/service/ReplyService.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,4 +302,44 @@ public DefaultResponse<?> editReply(Long replyId, ReplyUpdateForm form, HttpServ
302302
return new DefaultResponse<>(StatusCode.SUCCESS, ResponseMessage.REPLY_EDIT_SUCCESS, replyDto);
303303
}
304304

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+
}
305345
}

0 commit comments

Comments
 (0)