Skip to content

Commit ced6254

Browse files
committed
[J2KB-3rd-Season#23]feat: 답변 채택 추가
1 parent 420c9b6 commit ced6254

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ public DefaultResponse<?> changePostLike(@PathVariable("id") Long replyId, HttpS
4242
return replyService.changeReplyLike(replyId, request);
4343
}
4444

45+
@PatchMapping("/reply/{id}/select")
46+
public DefaultResponse<?> selectReply(@PathVariable("id") Long replyId, HttpServletRequest request) {
47+
return replyService.selectReply(replyId, request);
48+
}
49+
4550
@Data
4651
private static class CreateReplyResponse {
4752
private Long id;

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.devin.dev.dto.reply.ReplyLikeDto;
77
import com.devin.dev.dto.reply.ReplyMapper;
88
import com.devin.dev.entity.post.Post;
9+
import com.devin.dev.entity.post.PostStatus;
910
import com.devin.dev.entity.reply.Reply;
1011
import com.devin.dev.entity.reply.ReplyImage;
1112
import com.devin.dev.entity.reply.ReplyLike;
@@ -393,4 +394,48 @@ public DefaultResponse<ReplyDto> changeReplyLike(Long replyId, HttpServletReques
393394

394395
return new DefaultResponse<>(StatusCode.SUCCESS, ResponseMessage.REPLY_LIKE_CHANGE_SUCCESS, replyDto);
395396
}
397+
398+
public DefaultResponse<?> selectReply(Long replyId, HttpServletRequest request) {
399+
String token = tokenProvider.parseToken(request);
400+
Long userId;
401+
if (tokenProvider.validateToken(token)) {
402+
userId = tokenProvider.getUserId(token);
403+
} else {
404+
return new DefaultResponse<>(StatusCode.FAIL_AUTH, ResponseMessage.NOT_FOUND_USER);
405+
}
406+
Optional<User> userOptional = userRepository.findById(userId);
407+
if (userOptional.isEmpty()) {
408+
return new DefaultResponse<>(StatusCode.NOT_EXIST, ResponseMessage.NOT_FOUND_USER);
409+
}
410+
User user = userOptional.get();
411+
412+
Optional<Reply> replyOptional = replyRepository.findById(replyId);
413+
if (replyOptional.isEmpty()) {
414+
return new DefaultResponse<>(StatusCode.NOT_EXIST, ResponseMessage.NOT_FOUND_REPLY);
415+
}
416+
Reply reply = replyOptional.get();
417+
418+
if (isNotSameUser(user, reply.getPost().getUser())) {
419+
return new DefaultResponse<>(StatusCode.CONDITION_FAIL, ResponseMessage.NOT_SAME_USER);
420+
}
421+
422+
if (user.getId().equals(reply.getUser().getId())) {
423+
return new DefaultResponse<>(StatusCode.CONDITION_FAIL, ResponseMessage.SAME_USER);
424+
}
425+
426+
user.changeExp(User.ExpChangeType.REPLY_SELECT);
427+
reply.getUser().changeExp(User.ExpChangeType.REPLY_BE_SELECTED);
428+
429+
reply.setStatus(ReplyStatus.SELECTED);
430+
reply.getPost().setStatus(PostStatus.SELECTED);
431+
432+
replyRepository.save(reply);
433+
userRepository.save(user);
434+
userRepository.save(reply.getUser());
435+
postRepository.save(reply.getPost());
436+
437+
ReplyDto replyDto = new ReplyDto(reply);
438+
439+
return new DefaultResponse<>(StatusCode.SUCCESS, ResponseMessage.REPLY_LIKE_CHANGE_SUCCESS, replyDto);
440+
}
396441
}

src/main/java/com/devin/dev/utils/ResponseMessage.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public enum ResponseMessage {
1212
NOT_FOUND_REPLY("답변을 찾을 수 없습니다."),
1313
NOT_FOUND_SUBJECT("주제를 찾을 수 없습니다."),
1414
NOT_SAME_USER("작성자가 아닙니다."),
15+
SAME_USER("작성자 입니다."),
1516
CANNOT_DELETE_SELECTED("채택된 답변은 삭제할 수 없습니다."),
1617
CREATED_USER("회원 가입 성공"),
1718
UPDATE_USER("회원 정보 수정 성공"),

0 commit comments

Comments
 (0)