From d7d6829ea5a2e8806807572acfdd455b9b003196 Mon Sep 17 00:00:00 2001 From: koungq Date: Wed, 31 Jul 2024 22:34:11 +0900 Subject: [PATCH] =?UTF-8?q?Refactor:=20=EC=97=94=ED=8B=B0=ED=8B=B0=20?= =?UTF-8?q?=EC=B0=B8=EC=A1=B0=20=EA=B4=80=EA=B3=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weeth/domain/post/entity/Comment.java | 9 +++- .../leets/weeth/domain/post/entity/Post.java | 2 +- .../domain/post/service/CommentService.java | 43 +++++++++---------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/main/java/leets/weeth/domain/post/entity/Comment.java b/src/main/java/leets/weeth/domain/post/entity/Comment.java index 1b08311b..92ce4439 100644 --- a/src/main/java/leets/weeth/domain/post/entity/Comment.java +++ b/src/main/java/leets/weeth/domain/post/entity/Comment.java @@ -41,17 +41,22 @@ public class Comment extends BaseEntity { @Column(nullable = false) private Boolean isDeleted; - @OneToMany(orphanRemoval = true) + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private Comment parent; + + @OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY) private List children = new ArrayList<>(); LocalDateTime time; - public static Comment createComment(RequestCommentDTO dto, Post post, User user){ + public static Comment createComment(RequestCommentDTO dto, Post post, User user, Comment parent){ return Comment.builder() .post(post) .user(user) .content(dto.getContent()) .isDeleted(false) + .parent(parent) .build(); } diff --git a/src/main/java/leets/weeth/domain/post/entity/Post.java b/src/main/java/leets/weeth/domain/post/entity/Post.java index 82d4639b..bf778b29 100644 --- a/src/main/java/leets/weeth/domain/post/entity/Post.java +++ b/src/main/java/leets/weeth/domain/post/entity/Post.java @@ -37,7 +37,7 @@ public class Post extends BaseEntity { @Column(columnDefinition = "TEXT") private String content; - @OneToMany(orphanRemoval = true) + @OneToMany(mappedBy = "post", orphanRemoval = true) @JsonManagedReference private List parentComments = new ArrayList<>(); diff --git a/src/main/java/leets/weeth/domain/post/service/CommentService.java b/src/main/java/leets/weeth/domain/post/service/CommentService.java index e233ea31..9bddfe1b 100644 --- a/src/main/java/leets/weeth/domain/post/service/CommentService.java +++ b/src/main/java/leets/weeth/domain/post/service/CommentService.java @@ -8,9 +8,13 @@ import leets.weeth.domain.post.repository.PostRepository; import leets.weeth.domain.user.entity.User; import leets.weeth.domain.user.repository.UserRepository; -import leets.weeth.global.common.error.exception.custom.*; +import leets.weeth.global.common.error.exception.custom.CommentNotFoundException; +import leets.weeth.global.common.error.exception.custom.PostNotFoundException; +import leets.weeth.global.common.error.exception.custom.UserMismatchException; +import leets.weeth.global.common.error.exception.custom.UserNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; + import java.util.List; @RequiredArgsConstructor @@ -20,30 +24,25 @@ public class CommentService { private final UserRepository userRepository; private final CommentRepository commentRepository; + @Transactional public void createComment(Long userId, Long postId, RequestCommentDTO requestCommentDTO) { User user = userRepository.findById(userId) .orElseThrow(UserNotFoundException::new); - // 해당 유저가 없는 경우 - Post currentPost = postRepository.findById(postId).orElseThrow(PostNotFoundException::new); - // 해당 게시물이 없는 경우 - - Comment newComment = Comment.createComment(requestCommentDTO, currentPost, user); - Comment parentComment; - commentRepository.save(newComment); - // 댓글이 child인 경우(부모가 있는 경우) - if(requestCommentDTO.getParentCommentId()!=null){ - parentComment = commentRepository.findById(requestCommentDTO.getParentCommentId()) - .orElseThrow(CommentNotFoundException::new); - parentComment.addChild(newComment); - // 자식 추가 - commentRepository.save(parentComment); - } - else{ - // 댓글이 부모인 경우 - currentPost.addComment(newComment); - postRepository.save(currentPost); - } - postRepository.save(currentPost); + + Post post = postRepository.findById(postId).orElseThrow(PostNotFoundException::new); + + Comment parent = null; + if(requestCommentDTO.getParentCommentId() != null) + parent = commentRepository.findById(requestCommentDTO.getParentCommentId()) + .orElseThrow(CommentNotFoundException::new); + + Comment comment = Comment.createComment(requestCommentDTO, post, user, parent); + commentRepository.save(comment); + + if(parent == null) + post.addComment(comment); + else + parent.addChild(comment); } @Transactional