diff --git a/src/main/java/com/example/prdoit/controller/CommentController.java b/src/main/java/com/example/prdoit/controller/CommentController.java index 997e942..dc2ff38 100644 --- a/src/main/java/com/example/prdoit/controller/CommentController.java +++ b/src/main/java/com/example/prdoit/controller/CommentController.java @@ -5,6 +5,7 @@ import com.example.prdoit.service.comment.CommentService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.parameters.P; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -80,4 +81,63 @@ public ResponseEntity updateReply(@RequestBody CommentReplyPatchDto comm return ResponseEntity.internalServerError().body("대댓글 수정에 실패했습니다."); } } + + @GetMapping("/community/{communityId}") + public ResponseEntity getCommunityComments(@PathVariable String communityId) { + try { + return ResponseEntity.ok(commentService.getCommunityCommentList(communityId)); + } catch (CustomException e){ + return ResponseEntity.badRequest().body("댓글 조회에 실패했습니다."); + } catch (Exception e) { + return ResponseEntity.internalServerError().body("댓글 조회에 실패했습니다."); + } + } + + @PostMapping("/community") + public ResponseEntity createCommunityComment(@RequestBody CommunityCommentPostDto communityCommentPostDto) { + try { + commentService.postCommunityComment(communityCommentPostDto); + return ResponseEntity.ok("댓글이 성공적으로 작성되었습니다!"); + } catch (CustomException e) { + return ResponseEntity.badRequest().body("댓글 작성에 실패했습니다."); + } catch (Exception e) { + return ResponseEntity.internalServerError().body("댓글 작성에 실패했습니다."); + } + } + + @PostMapping("/community/reply") + public ResponseEntity createCommunityReply(@RequestBody CommunityCommentReplyPostDto communityCommentReplyPostDto) { + try { + commentService.postCommunityCommentReply(communityCommentReplyPostDto); + return ResponseEntity.ok("대댓글이 성공적으로 작성되었습니다!"); + } catch (CustomException e) { + return ResponseEntity.badRequest().body("대댓글 작성에 실패했습니다."); + } catch (Exception e) { + return ResponseEntity.internalServerError().body("대댓글 작성에 실패했습니다."); + } + } + + @PatchMapping("/community") + public ResponseEntity updateCommunityComment(@RequestBody CommunityCommentPatchDto communityCommentPatchDto) { + try { + commentService.patchCommunityComment(communityCommentPatchDto); + return ResponseEntity.ok("댓글이 성공적으로 수정되었습니다!"); + } catch (CustomException e) { + return ResponseEntity.badRequest().body("댓글 수정에 실패했습니다."); + } catch (Exception e) { + return ResponseEntity.internalServerError().body("댓글 수정에 실패했습니다."); + } + } + + @PatchMapping("/community/reply") + public ResponseEntity updateCommunityReply(@RequestBody CommunityCommentReplyPatchDto communityCommentReplyPatchDto) { + try { + commentService.patchCommunityCommentReply(communityCommentReplyPatchDto); + return ResponseEntity.ok("대댓글이 성공적으로 수정되었습니다!"); + } catch (CustomException e) { + return ResponseEntity.badRequest().body("대댓글 수정에 실패했습니다."); + } catch (Exception e) { + return ResponseEntity.internalServerError().body("대댓글 수정에 실패했습니다."); + } + } } diff --git a/src/main/java/com/example/prdoit/dto/comment/CommunityCommentPatchDto.java b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentPatchDto.java new file mode 100644 index 0000000..9b12fa0 --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentPatchDto.java @@ -0,0 +1,18 @@ +package com.example.prdoit.dto.comment; + +import lombok.*; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CommunityCommentPatchDto { + + private int commentId; + private String commentContent; + private LocalDateTime commentDate; + +} diff --git a/src/main/java/com/example/prdoit/dto/comment/CommunityCommentPostDto.java b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentPostDto.java new file mode 100644 index 0000000..ac8dba0 --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentPostDto.java @@ -0,0 +1,19 @@ +package com.example.prdoit.dto.comment; + +import lombok.*; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CommunityCommentPostDto { + + private String communityId; + private String commentContent; + private String userId; + private LocalDateTime commentDate; + +} diff --git a/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyPatchDto.java b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyPatchDto.java new file mode 100644 index 0000000..195880c --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyPatchDto.java @@ -0,0 +1,17 @@ +package com.example.prdoit.dto.comment; + +import lombok.*; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CommunityCommentReplyPatchDto { + + private int commentReplyId; + private String commentReplyContent; + private LocalDateTime commentReplyDate; +} diff --git a/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyPostDto.java b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyPostDto.java new file mode 100644 index 0000000..8b2b628 --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyPostDto.java @@ -0,0 +1,19 @@ +package com.example.prdoit.dto.comment; + +import lombok.*; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CommunityCommentReplyPostDto { + + private int commentId; + private String commentReplyContent; + private String userId; + private LocalDateTime commentReplyDate; + +} diff --git a/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyResponseDto.java b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyResponseDto.java new file mode 100644 index 0000000..665bb65 --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentReplyResponseDto.java @@ -0,0 +1,20 @@ +package com.example.prdoit.dto.comment; + + +import lombok.*; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CommunityCommentReplyResponseDto { + + private int commentReplyId; + private String commentReplyContent; + private String commentReplyNickname; + private String userId; + private LocalDateTime commentReplyDate; +} diff --git a/src/main/java/com/example/prdoit/dto/comment/CommunityCommentResponseDto.java b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentResponseDto.java new file mode 100644 index 0000000..387d70d --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/comment/CommunityCommentResponseDto.java @@ -0,0 +1,22 @@ +package com.example.prdoit.dto.comment; + +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CommunityCommentResponseDto { + + private int commentId; + private String commentContent; + private String userId; + private String commentNickname; + private LocalDateTime commentDate; + private List communityCommentReplyResponseDtoList; + +} diff --git a/src/main/java/com/example/prdoit/service/comment/CommentService.java b/src/main/java/com/example/prdoit/service/comment/CommentService.java index ab6a0ef..35baba1 100644 --- a/src/main/java/com/example/prdoit/service/comment/CommentService.java +++ b/src/main/java/com/example/prdoit/service/comment/CommentService.java @@ -15,4 +15,15 @@ public interface CommentService { void patchComment(CommentPatchDto commentPatchDto); void patchCommentReply(CommentReplyPatchDto commentReplyPatchDto); + + List getCommunityCommentList(String communityId); + + void postCommunityComment(CommunityCommentPostDto communityCommentPostDto); + + void postCommunityCommentReply(CommunityCommentReplyPostDto communityCommentReplyPostDto); + + void patchCommunityComment(CommunityCommentPatchDto communityCommentPatchDto); + + void patchCommunityCommentReply(CommunityCommentReplyPatchDto communityCommentReplyPatchDto); + } diff --git a/src/main/java/com/example/prdoit/service/comment/CommentServiceImpl.java b/src/main/java/com/example/prdoit/service/comment/CommentServiceImpl.java index e5c2880..b666bfc 100644 --- a/src/main/java/com/example/prdoit/service/comment/CommentServiceImpl.java +++ b/src/main/java/com/example/prdoit/service/comment/CommentServiceImpl.java @@ -23,6 +23,7 @@ public class CommentServiceImpl implements CommentService { private final ContentTableRepository contentTableRepository; private final NotificationTableRepository notificationTableRepository; private final IdTableRepository idTableRepository; + private final CommunityTableRepository communityTableRepository; // 1. 댓글 목록 조회 (GET) @Override @@ -156,4 +157,135 @@ public void patchCommentReply(CommentReplyPatchDto commentReplyPatchDto) { throw new CustomException("대댓글 수정 중 오류가 발생했습니다."); } } + + @Override + public List getCommunityCommentList(String communityId) { + log.info("[getCommunityCommentList] 커뮤니티 댓글 목록 조회 시작 - Community ID: {}", communityId); + + CommunityTable communityTable = communityTableRepository.findById(communityId) + .orElseThrow(() -> new CustomException("해당 커뮤니티가 없습니다. ID = " + communityId)); + + try{ + return communityTable.getCommentTable().stream().map(comment -> CommunityCommentResponseDto.builder() + .commentId(comment.getCommentId()) + .commentContent(comment.getCommentContent()) + .userId(comment.getContentId().getUserId().getId()) + .commentNickname(comment.getCommentNickname()) + .commentDate(comment.getCommentDate()) + .communityCommentReplyResponseDtoList(comment.getCommentCommentTable().stream() + .map(reply -> CommunityCommentReplyResponseDto.builder() + .commentReplyId(reply.getCommentCommentId()) + .commentReplyContent(reply.getCommentCommentContent()) + .commentReplyNickname(reply.getUserNickname()) + .commentReplyDate(reply.getCommentCommentDate()) + .userId(reply.getCommentId().getContentId().getUserId().getId()) + .build()) + .collect(Collectors.toList())) + .build()).collect(Collectors.toList()); + } catch (Exception e){ + log.error("[getCommunityCommentList] 커뮤니티 댓글 목록 조회 중 오류 발생 - {}", e.getMessage()); + throw new CustomException("커뮤니티 댓글 목록 조회 중 오류가 발생했습니다."); + } + } + + @Override + public void postCommunityComment(CommunityCommentPostDto communityCommentPostDto) { + log.info("[postCommunityComment] 커뮤니티 댓글 등록 시작 - Community ID: {}", communityCommentPostDto.getCommunityId()); + + CommunityTable communityTable = communityTableRepository.findById(communityCommentPostDto.getCommunityId()) + .orElseThrow(() -> new CustomException("해당 커뮤니티가 없습니다.")); + + IdTable idTable = idTableRepository.findById(communityCommentPostDto.getUserId()).orElseThrow(()-> new CustomException("해당 아이디가 존재하지 않습니다.")); + + try { + commentTableRepository.save(CommentTable.builder() + .commentContent(communityCommentPostDto.getCommentContent()) + .commentNickname(idTable.getNickname()) + .commentDate(communityCommentPostDto.getCommentDate()) + .communityId(communityTable) + .build()); + + notificationTableRepository.save(NotificationTable.builder() + .notificationContent("커뮤니티 댓글이 작성되었습니다.") + .contentId(communityTable.getCommunityId()) + .userId(communityTable.getId()) + .isRead(0) + .isContent(1) + .build()); + + log.info("[postCommunityComment] 커뮤니티 댓글 등록을 완료했습니다."); + } catch (Exception e){ + log.error("[postCommunityComment] 커뮤니티 댓글 등록 중 오류 발생 - {}", e.getMessage()); + throw new CustomException("커뮤니티 댓글 등록 중 오류가 발생했습니다."); + } + } + + @Override + public void postCommunityCommentReply(CommunityCommentReplyPostDto communityCommentReplyPostDto) { + log.info("[postCommunityCommentReply] 커뮤니티 대댓글 등록 시작"); + + CommentTable parentComment = commentTableRepository.findById(communityCommentReplyPostDto.getCommentId()) + .orElseThrow(() -> new CustomException("해당 댓글이 없습니다.")); + + IdTable idTable = idTableRepository.findById(communityCommentReplyPostDto.getUserId()).orElseThrow(()->new CustomException("해당아이디가 존재하지 않습니다.")); + try { + commentCommentTableRepository.save(CommentCommentTable.builder() + .commentCommentContent(communityCommentReplyPostDto.getCommentReplyContent()) + .userNickname(idTable.getNickname()) + .commentCommentDate(communityCommentReplyPostDto.getCommentReplyDate()) + .commentId(parentComment) + .build()); + + notificationTableRepository.save(NotificationTable.builder() + .notificationContent("커뮤니티 대댓글이 작성되었습니다.") + .contentId(parentComment.getCommunityId().getCommunityId()) + .userId(idTableRepository.findByNickname(parentComment.getCommentNickname())) + .isRead(0) + .isContent(1) + .build()); + + log.info("[postCommunityCommentReply] 커뮤니티 대댓글 등록을 완료했습니다."); + } catch (Exception e){ + log.error("[postCommunityCommentReply] 커뮤니티 대댓글 등록 중 오류 발생 - {}", e.getMessage()); + throw new CustomException("커뮤니티 대댓글 등록 중 오류가 발생했습니다."); + } + } + + @Override + public void patchCommunityComment(CommunityCommentPatchDto communityCommentPatchDto) { + log.info("[patchCommunityComment] 커뮤니티 댓글 수정 시작 - Comment ID: {}", communityCommentPatchDto.getCommentId()); + + CommentTable comment = commentTableRepository.findById(communityCommentPatchDto.getCommentId()) + .orElseThrow(() -> new CustomException("해당 댓글이 없습니다.")); + + try{ + comment.setCommentContent(communityCommentPatchDto.getCommentContent()); + comment.setCommentDate(communityCommentPatchDto.getCommentDate()); + commentTableRepository.save(comment); + + log.info("[patchCommunityComment] 커뮤니티 댓글 수정이 완료되었습니다."); + } catch (Exception e){ + log.error("[patchCommunityComment] 커뮤니티 댓글 수정 중 오류 발생 - {}", e.getMessage()); + throw new CustomException("커뮤니티 댓글 수정 중 오류가 발생했습니다."); + } + } + + @Override + public void patchCommunityCommentReply(CommunityCommentReplyPatchDto communityCommentReplyPatchDto) { + log.info("[patchCommunityCommentReply] 커뮤니티 대댓글 수정 시작 - CommentReply ID: {}", communityCommentReplyPatchDto.getCommentReplyId()); + + CommentCommentTable reply = commentCommentTableRepository.findById(communityCommentReplyPatchDto.getCommentReplyId()) + .orElseThrow(() -> new CustomException("해당 대댓글이 없습니다.")); + + try{ + reply.setCommentCommentContent(communityCommentReplyPatchDto.getCommentReplyContent()); + reply.setCommentCommentDate(communityCommentReplyPatchDto.getCommentReplyDate()); + commentCommentTableRepository.save(reply); + + log.info("[patchCommunityCommentReply] 커뮤니티 대댓글 수정이 완료되었습니다."); + } catch (Exception e){ + log.error("[patchCommunityCommentReply] 커뮤니티 대댓글 수정 중 오류 발생 - {}", e.getMessage()); + throw new CustomException("커뮤니티 대댓글 수정 중 오류가 발생했습니다."); + } + } }