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 1b08311..92ce443 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 82d4639..bf778b2 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 e233ea3..9bddfe1 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