diff --git a/build.gradle.kts b/build.gradle.kts index d1f5bacd..fdcdf156 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -84,4 +84,5 @@ dependencies { tasks.withType { useJUnitPlatform() + systemProperty("spring.profiles.active", "test") } diff --git a/src/main/java/com/back/domain/board/comment/controller/CommentController.java b/src/main/java/com/back/domain/board/comment/controller/CommentController.java index a4091b2e..429f8b1c 100644 --- a/src/main/java/com/back/domain/board/comment/controller/CommentController.java +++ b/src/main/java/com/back/domain/board/comment/controller/CommentController.java @@ -1,5 +1,6 @@ package com.back.domain.board.comment.controller; +import com.back.domain.board.comment.controller.docs.CommentControllerDocs; import com.back.domain.board.comment.dto.CommentListResponse; import com.back.domain.board.comment.dto.CommentRequest; import com.back.domain.board.comment.dto.CommentResponse; diff --git a/src/main/java/com/back/domain/board/comment/controller/CommentLikeController.java b/src/main/java/com/back/domain/board/comment/controller/CommentLikeController.java index 1db63f82..6ad0ad04 100644 --- a/src/main/java/com/back/domain/board/comment/controller/CommentLikeController.java +++ b/src/main/java/com/back/domain/board/comment/controller/CommentLikeController.java @@ -1,5 +1,6 @@ package com.back.domain.board.comment.controller; +import com.back.domain.board.comment.controller.docs.CommentLikeControllerDocs; import com.back.domain.board.comment.dto.CommentLikeResponse; import com.back.domain.board.comment.service.CommentLikeService; import com.back.global.common.dto.RsData; diff --git a/src/main/java/com/back/domain/board/comment/controller/CommentControllerDocs.java b/src/main/java/com/back/domain/board/comment/controller/docs/CommentControllerDocs.java similarity index 99% rename from src/main/java/com/back/domain/board/comment/controller/CommentControllerDocs.java rename to src/main/java/com/back/domain/board/comment/controller/docs/CommentControllerDocs.java index 7ff99a66..57cedc49 100644 --- a/src/main/java/com/back/domain/board/comment/controller/CommentControllerDocs.java +++ b/src/main/java/com/back/domain/board/comment/controller/docs/CommentControllerDocs.java @@ -1,4 +1,4 @@ -package com.back.domain.board.comment.controller; +package com.back.domain.board.comment.controller.docs; import com.back.domain.board.comment.dto.CommentListResponse; import com.back.domain.board.comment.dto.CommentRequest; diff --git a/src/main/java/com/back/domain/board/comment/controller/CommentLikeControllerDocs.java b/src/main/java/com/back/domain/board/comment/controller/docs/CommentLikeControllerDocs.java similarity index 99% rename from src/main/java/com/back/domain/board/comment/controller/CommentLikeControllerDocs.java rename to src/main/java/com/back/domain/board/comment/controller/docs/CommentLikeControllerDocs.java index 23ef9d8b..3ef9ee92 100644 --- a/src/main/java/com/back/domain/board/comment/controller/CommentLikeControllerDocs.java +++ b/src/main/java/com/back/domain/board/comment/controller/docs/CommentLikeControllerDocs.java @@ -1,4 +1,4 @@ -package com.back.domain.board.comment.controller; +package com.back.domain.board.comment.controller.docs; import com.back.domain.board.comment.dto.CommentLikeResponse; import com.back.global.common.dto.RsData; diff --git a/src/main/java/com/back/domain/board/comment/entity/Comment.java b/src/main/java/com/back/domain/board/comment/entity/Comment.java index dc7d17b4..4119f9d6 100644 --- a/src/main/java/com/back/domain/board/comment/entity/Comment.java +++ b/src/main/java/com/back/domain/board/comment/entity/Comment.java @@ -9,31 +9,30 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Entity @Getter @NoArgsConstructor public class Comment extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "post_id") + @JoinColumn(name = "post_id", nullable = false) private Post post; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", nullable = false) private User user; + @Column(nullable = false, columnDefinition = "TEXT") private String content; - // TODO: 추후 CommentRepositoryImpl#getCommentsByPostId 로직 개선 필요, ERD에도 반영할 것 @Column(nullable = false) private Long likeCount = 0L; - // 해당 댓글의 부모 댓글 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_comment_id") private Comment parent; - // 해당 댓글에 달린 대댓글 목록 @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) private List children = new ArrayList<>(); @@ -41,31 +40,49 @@ public class Comment extends BaseEntity { private List commentLikes = new ArrayList<>(); // -------------------- 생성자 -------------------- - public Comment(Post post, User user, String content) { - this.post = post; - this.user = user; - this.content = content; - } - public Comment(Post post, User user, String content, Comment parent) { this.post = post; this.user = user; this.content = content; this.parent = parent; + post.addComment(this); + user.addComment(this); + } + + // -------------------- 정적 팩토리 메서드 -------------------- + /** 루트 댓글 생성 */ + public static Comment createRoot(Post post, User user, String content) { + return new Comment(post, user, content, null); + } + + /** 대댓글 생성 */ + public static Comment createChild(Post post, User user, String content, Comment parent) { + Comment comment = new Comment(post, user, content, parent); + parent.getChildren().add(comment); + return comment; + } + + // -------------------- 연관관계 편의 메서드 -------------------- + public void addLike(CommentLike like) { + this.commentLikes.add(like); + } + + public void removeLike(CommentLike like) { + this.commentLikes.remove(like); } // -------------------- 비즈니스 메서드 -------------------- - // 댓글 업데이트 + /** 댓글 내용 수정 */ public void update(String content) { this.content = content; } - // 좋아요 수 증가 + /** 좋아요 수 증가 */ public void increaseLikeCount() { this.likeCount++; } - // 좋아요 수 감소 + /** 좋아요 수 감소 */ public void decreaseLikeCount() { if (this.likeCount > 0) { this.likeCount--; diff --git a/src/main/java/com/back/domain/board/comment/entity/CommentLike.java b/src/main/java/com/back/domain/board/comment/entity/CommentLike.java index 2672040e..4807a331 100644 --- a/src/main/java/com/back/domain/board/comment/entity/CommentLike.java +++ b/src/main/java/com/back/domain/board/comment/entity/CommentLike.java @@ -2,10 +2,7 @@ import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -13,13 +10,23 @@ @Entity @Getter @NoArgsConstructor -@AllArgsConstructor +@Table( + uniqueConstraints = @UniqueConstraint(columnNames = {"comment_id", "user_id"}) +) public class CommentLike extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "comment_id") + @JoinColumn(name = "comment_id", nullable = false) private Comment comment; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", nullable = false) private User user; + + // -------------------- 생성자 -------------------- + public CommentLike(Comment comment, User user) { + this.comment = comment; + this.user = user; + comment.addLike(this); + user.addCommentLike(this); + } } diff --git a/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepository.java b/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepository.java index df675a48..664b1835 100644 --- a/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepository.java +++ b/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepository.java @@ -1,13 +1,10 @@ package com.back.domain.board.comment.repository; import com.back.domain.board.comment.entity.CommentLike; +import com.back.domain.board.comment.repository.custom.CommentLikeRepositoryCustom; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.util.Collection; -import java.util.List; import java.util.Optional; @Repository diff --git a/src/main/java/com/back/domain/board/comment/repository/CommentRepository.java b/src/main/java/com/back/domain/board/comment/repository/CommentRepository.java index 79fd7f5c..72004816 100644 --- a/src/main/java/com/back/domain/board/comment/repository/CommentRepository.java +++ b/src/main/java/com/back/domain/board/comment/repository/CommentRepository.java @@ -1,6 +1,7 @@ package com.back.domain.board.comment.repository; import com.back.domain.board.comment.entity.Comment; +import com.back.domain.board.comment.repository.custom.CommentRepositoryCustom; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepositoryCustom.java b/src/main/java/com/back/domain/board/comment/repository/custom/CommentLikeRepositoryCustom.java similarity index 76% rename from src/main/java/com/back/domain/board/comment/repository/CommentLikeRepositoryCustom.java rename to src/main/java/com/back/domain/board/comment/repository/custom/CommentLikeRepositoryCustom.java index a2ec7cbb..c25233e8 100644 --- a/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepositoryCustom.java +++ b/src/main/java/com/back/domain/board/comment/repository/custom/CommentLikeRepositoryCustom.java @@ -1,4 +1,4 @@ -package com.back.domain.board.comment.repository; +package com.back.domain.board.comment.repository.custom; import java.util.Collection; import java.util.List; diff --git a/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepositoryImpl.java b/src/main/java/com/back/domain/board/comment/repository/custom/CommentLikeRepositoryImpl.java similarity index 93% rename from src/main/java/com/back/domain/board/comment/repository/CommentLikeRepositoryImpl.java rename to src/main/java/com/back/domain/board/comment/repository/custom/CommentLikeRepositoryImpl.java index 9e520555..d3a4c356 100644 --- a/src/main/java/com/back/domain/board/comment/repository/CommentLikeRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/comment/repository/custom/CommentLikeRepositoryImpl.java @@ -1,4 +1,4 @@ -package com.back.domain.board.comment.repository; +package com.back.domain.board.comment.repository.custom; import com.back.domain.board.comment.entity.QCommentLike; import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryCustom.java b/src/main/java/com/back/domain/board/comment/repository/custom/CommentRepositoryCustom.java similarity index 83% rename from src/main/java/com/back/domain/board/comment/repository/CommentRepositoryCustom.java rename to src/main/java/com/back/domain/board/comment/repository/custom/CommentRepositoryCustom.java index 62df0844..f46be2fe 100644 --- a/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryCustom.java +++ b/src/main/java/com/back/domain/board/comment/repository/custom/CommentRepositoryCustom.java @@ -1,4 +1,4 @@ -package com.back.domain.board.comment.repository; +package com.back.domain.board.comment.repository.custom; import com.back.domain.board.comment.dto.CommentListResponse; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryImpl.java b/src/main/java/com/back/domain/board/comment/repository/custom/CommentRepositoryImpl.java similarity index 99% rename from src/main/java/com/back/domain/board/comment/repository/CommentRepositoryImpl.java rename to src/main/java/com/back/domain/board/comment/repository/custom/CommentRepositoryImpl.java index 29156bf5..97e513cc 100644 --- a/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/comment/repository/custom/CommentRepositoryImpl.java @@ -1,4 +1,4 @@ -package com.back.domain.board.comment.repository; +package com.back.domain.board.comment.repository.custom; import com.back.domain.board.comment.dto.CommentListResponse; import com.back.domain.board.comment.dto.QCommentListResponse; diff --git a/src/main/java/com/back/domain/board/comment/service/CommentLikeService.java b/src/main/java/com/back/domain/board/comment/service/CommentLikeService.java index 192b901f..24b30884 100644 --- a/src/main/java/com/back/domain/board/comment/service/CommentLikeService.java +++ b/src/main/java/com/back/domain/board/comment/service/CommentLikeService.java @@ -70,6 +70,10 @@ public CommentLikeResponse cancelLikeComment(Long commentId, Long userId) { CommentLike commentLike = commentLikeRepository.findByUserIdAndCommentId(userId, commentId) .orElseThrow(() -> new CustomException(ErrorCode.COMMENT_LIKE_NOT_FOUND)); + // 연관관계 제거 + comment.removeLike(commentLike); + user.removeCommentLike(commentLike); + // CommentLike 삭제 commentLikeRepository.delete(commentLike); diff --git a/src/main/java/com/back/domain/board/comment/service/CommentService.java b/src/main/java/com/back/domain/board/comment/service/CommentService.java index 98e768f1..0bf86d6d 100644 --- a/src/main/java/com/back/domain/board/comment/service/CommentService.java +++ b/src/main/java/com/back/domain/board/comment/service/CommentService.java @@ -38,12 +38,15 @@ public class CommentService { private final PostRepository postRepository; private final ApplicationEventPublisher eventPublisher; + // TODO: 연관관계 고려, 메서드 명, 중복 코드 제거, 주석 통일 + // TODO: comment 끝나면 post도 해야 함.. entity > DTO > Repo > Service > Controller > Docs 순으로.. /** * 댓글 생성 서비스 * 1. User 조회 * 2. Post 조회 - * 3. Comment 생성 - * 4. Comment 저장 및 CommentResponse 반환 + * 3. Comment 생성 및 저장 + * 4. 댓글 작성 이벤트 발행 + * 5. CommentResponse 반환 */ public CommentResponse createComment(Long postId, CommentRequest request, Long userId) { // User 조회 @@ -54,10 +57,11 @@ public CommentResponse createComment(Long postId, CommentRequest request, Long u Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND)); - // Comment 생성 - Comment comment = new Comment(post, user, request.content()); + // CommentCount 증가 + post.increaseCommentCount(); - // Comment 저장 및 응답 반환 + // Comment 생성 및 저장 + Comment comment = Comment.createRoot(post, user, request.content()); commentRepository.save(comment); // 댓글 작성 이벤트 발행 @@ -164,6 +168,10 @@ public CommentResponse updateComment(Long postId, Long commentId, CommentRequest * 4. Comment 삭제 */ public void deleteComment(Long postId, Long commentId, Long userId) { + // User 조회 + User user = userRepository.findById(userId) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + // Post 조회 Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND)); @@ -177,6 +185,11 @@ public void deleteComment(Long postId, Long commentId, Long userId) { throw new CustomException(ErrorCode.COMMENT_NO_PERMISSION); } + // 연관관계 제거 + post.removeComment(comment); + user.removeComment(comment); + + // Comment 삭제 commentRepository.delete(comment); } diff --git a/src/main/java/com/back/domain/board/post/controller/PostBookmarkController.java b/src/main/java/com/back/domain/board/post/controller/PostBookmarkController.java index 260b611d..0ce42ab9 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostBookmarkController.java +++ b/src/main/java/com/back/domain/board/post/controller/PostBookmarkController.java @@ -1,5 +1,6 @@ package com.back.domain.board.post.controller; +import com.back.domain.board.post.controller.docs.PostBookmarkControllerDocs; import com.back.domain.board.post.dto.PostBookmarkResponse; import com.back.domain.board.post.service.PostBookmarkService; import com.back.global.common.dto.RsData; diff --git a/src/main/java/com/back/domain/board/post/controller/PostCategoryController.java b/src/main/java/com/back/domain/board/post/controller/PostCategoryController.java index 41139450..1dcf037e 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostCategoryController.java +++ b/src/main/java/com/back/domain/board/post/controller/PostCategoryController.java @@ -1,5 +1,6 @@ package com.back.domain.board.post.controller; +import com.back.domain.board.post.controller.docs.PostCategoryControllerDocs; import com.back.domain.board.post.dto.CategoryRequest; import com.back.domain.board.post.dto.CategoryResponse; import com.back.domain.board.post.service.PostCategoryService; diff --git a/src/main/java/com/back/domain/board/post/controller/PostController.java b/src/main/java/com/back/domain/board/post/controller/PostController.java index f0a1c67a..ab0e453c 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostController.java +++ b/src/main/java/com/back/domain/board/post/controller/PostController.java @@ -1,6 +1,7 @@ package com.back.domain.board.post.controller; import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.post.controller.docs.PostControllerDocs; import com.back.domain.board.post.dto.PostDetailResponse; import com.back.domain.board.post.dto.PostListResponse; import com.back.domain.board.post.dto.PostRequest; diff --git a/src/main/java/com/back/domain/board/post/controller/PostLikeController.java b/src/main/java/com/back/domain/board/post/controller/PostLikeController.java index 61298e7b..f7da88b9 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostLikeController.java +++ b/src/main/java/com/back/domain/board/post/controller/PostLikeController.java @@ -1,5 +1,6 @@ package com.back.domain.board.post.controller; +import com.back.domain.board.post.controller.docs.PostLikeControllerDocs; import com.back.domain.board.post.dto.PostLikeResponse; import com.back.domain.board.post.service.PostLikeService; import com.back.global.common.dto.RsData; diff --git a/src/main/java/com/back/domain/board/post/controller/PostBookmarkControllerDocs.java b/src/main/java/com/back/domain/board/post/controller/docs/PostBookmarkControllerDocs.java similarity index 99% rename from src/main/java/com/back/domain/board/post/controller/PostBookmarkControllerDocs.java rename to src/main/java/com/back/domain/board/post/controller/docs/PostBookmarkControllerDocs.java index 45c828c4..bebf4bbe 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostBookmarkControllerDocs.java +++ b/src/main/java/com/back/domain/board/post/controller/docs/PostBookmarkControllerDocs.java @@ -1,4 +1,4 @@ -package com.back.domain.board.post.controller; +package com.back.domain.board.post.controller.docs; import com.back.domain.board.post.dto.PostBookmarkResponse; import com.back.global.common.dto.RsData; diff --git a/src/main/java/com/back/domain/board/post/controller/PostCategoryControllerDocs.java b/src/main/java/com/back/domain/board/post/controller/docs/PostCategoryControllerDocs.java similarity index 99% rename from src/main/java/com/back/domain/board/post/controller/PostCategoryControllerDocs.java rename to src/main/java/com/back/domain/board/post/controller/docs/PostCategoryControllerDocs.java index cc7c9eaf..41baa3b5 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostCategoryControllerDocs.java +++ b/src/main/java/com/back/domain/board/post/controller/docs/PostCategoryControllerDocs.java @@ -1,4 +1,4 @@ -package com.back.domain.board.post.controller; +package com.back.domain.board.post.controller.docs; import com.back.domain.board.post.dto.CategoryRequest; import com.back.domain.board.post.dto.CategoryResponse; diff --git a/src/main/java/com/back/domain/board/post/controller/PostControllerDocs.java b/src/main/java/com/back/domain/board/post/controller/docs/PostControllerDocs.java similarity index 99% rename from src/main/java/com/back/domain/board/post/controller/PostControllerDocs.java rename to src/main/java/com/back/domain/board/post/controller/docs/PostControllerDocs.java index 42e99858..a9c4db11 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostControllerDocs.java +++ b/src/main/java/com/back/domain/board/post/controller/docs/PostControllerDocs.java @@ -1,4 +1,4 @@ -package com.back.domain.board.post.controller; +package com.back.domain.board.post.controller.docs; import com.back.domain.board.common.dto.PageResponse; import com.back.domain.board.post.dto.PostDetailResponse; diff --git a/src/main/java/com/back/domain/board/post/controller/PostLikeControllerDocs.java b/src/main/java/com/back/domain/board/post/controller/docs/PostLikeControllerDocs.java similarity index 99% rename from src/main/java/com/back/domain/board/post/controller/PostLikeControllerDocs.java rename to src/main/java/com/back/domain/board/post/controller/docs/PostLikeControllerDocs.java index 3ab347a7..9543b8d3 100644 --- a/src/main/java/com/back/domain/board/post/controller/PostLikeControllerDocs.java +++ b/src/main/java/com/back/domain/board/post/controller/docs/PostLikeControllerDocs.java @@ -1,4 +1,4 @@ -package com.back.domain.board.post.controller; +package com.back.domain.board.post.controller.docs; import com.back.domain.board.post.dto.PostLikeResponse; import com.back.global.common.dto.RsData; diff --git a/src/main/java/com/back/domain/board/post/entity/Post.java b/src/main/java/com/back/domain/board/post/entity/Post.java index 4696d65b..30c34d02 100644 --- a/src/main/java/com/back/domain/board/post/entity/Post.java +++ b/src/main/java/com/back/domain/board/post/entity/Post.java @@ -9,17 +9,16 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; @Entity @Getter @NoArgsConstructor public class Post extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", nullable = false) private User user; + @Column(nullable = false) private String title; @Column(nullable = false, columnDefinition = "TEXT") @@ -28,7 +27,6 @@ public class Post extends BaseEntity { @Column(length = 500) private String thumbnailUrl; - // TODO: 추후 PostRepositoryImpl#searchPosts 로직 개선 필요, ERD에도 반영할 것 @Column(nullable = false) private Long likeCount = 0L; @@ -51,65 +49,86 @@ public class Post extends BaseEntity { private List comments = new ArrayList<>(); // -------------------- 생성자 -------------------- - public Post(User user, String title, String content) { - this.user = user; - this.title = title; - this.content = content; - this.thumbnailUrl = null; - } - public Post(User user, String title, String content, String thumbnailUrl) { this.user = user; this.title = title; this.content = content; this.thumbnailUrl = thumbnailUrl; + user.addPost(this); + } + + // -------------------- 연관관계 편의 메서드 -------------------- + public void addPostCategoryMapping(PostCategoryMapping mapping) { + this.postCategoryMappings.add(mapping); + } + + public void addLike(PostLike like) { + this.postLikes.add(like); + } + + public void removeLike(PostLike like) { + this.postLikes.remove(like); + } + + public void addBookmark(PostBookmark bookmark) { + this.postBookmarks.add(bookmark); + } + + public void removeBookmark(PostBookmark bookmark) { + this.postBookmarks.remove(bookmark); + } + + public void addComment(Comment comment) { + this.comments.add(comment); + } + + public void removeComment(Comment comment) { + this.comments.remove(comment); } // -------------------- 비즈니스 메서드 -------------------- - // 게시글 업데이트 + /** 게시글 내용 수정 */ public void update(String title, String content) { this.title = title; this.content = content; } - // 카테고리 업데이트 + /** 카테고리 일괄 업데이트 */ public void updateCategories(List categories) { this.postCategoryMappings.clear(); - categories.forEach(category -> - this.postCategoryMappings.add(new PostCategoryMapping(this, category)) - ); + categories.forEach(category -> new PostCategoryMapping(this, category)); } - // 좋아요 수 증가 + /** 좋아요 수 증가 */ public void increaseLikeCount() { this.likeCount++; } - // 좋아요 수 감소 + /** 좋아요 수 감소 */ public void decreaseLikeCount() { if (this.likeCount > 0) { this.likeCount--; } } - // 북마크 수 증가 + /** 북마크 수 증가 */ public void increaseBookmarkCount() { this.bookmarkCount++; } - // 북마크 수 감소 + /** 북마크 수 감소 */ public void decreaseBookmarkCount() { if (this.bookmarkCount > 0) { this.bookmarkCount--; } } - // 댓글 수 증가 + /** 댓글 수 증가 */ public void increaseCommentCount() { this.commentCount++; } - // 댓글 수 감소 + /** 댓글 수 감소 */ public void decreaseCommentCount() { if (this.commentCount > 0) { this.commentCount--; @@ -117,7 +136,7 @@ public void decreaseCommentCount() { } // -------------------- 헬퍼 메서드 -------------------- - // 게시글에 연결된 카테고리 목록 조회 + /** 게시글에 연결된 카테고리 목록 조회 */ public List getCategories() { return postCategoryMappings.stream() .map(PostCategoryMapping::getCategory) diff --git a/src/main/java/com/back/domain/board/post/entity/PostBookmark.java b/src/main/java/com/back/domain/board/post/entity/PostBookmark.java index 78b10c1f..6f8bdbe7 100644 --- a/src/main/java/com/back/domain/board/post/entity/PostBookmark.java +++ b/src/main/java/com/back/domain/board/post/entity/PostBookmark.java @@ -10,18 +10,23 @@ @Entity @Getter @NoArgsConstructor -@AllArgsConstructor @Table( - uniqueConstraints = { - @UniqueConstraint(columnNames = {"post_id", "user_id"}) - } + uniqueConstraints = @UniqueConstraint(columnNames = {"post_id", "user_id"}) ) public class PostBookmark extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "post_id") + @JoinColumn(name = "post_id", nullable = false) private Post post; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", nullable = false) private User user; + + // -------------------- 생성자 -------------------- + public PostBookmark(Post post, User user) { + this.post = post; + this.user = user; + post.addBookmark(this); + user.addPostBookmark(this); + } } diff --git a/src/main/java/com/back/domain/board/post/entity/PostCategory.java b/src/main/java/com/back/domain/board/post/entity/PostCategory.java index 9841199c..38a16a61 100644 --- a/src/main/java/com/back/domain/board/post/entity/PostCategory.java +++ b/src/main/java/com/back/domain/board/post/entity/PostCategory.java @@ -12,7 +12,11 @@ @Entity @NoArgsConstructor @Getter +@Table( + uniqueConstraints = {@UniqueConstraint(columnNames = {"name", "type"})} +) public class PostCategory extends BaseEntity { + @Column(nullable = false) private String name; @Enumerated(EnumType.STRING) @@ -23,15 +27,14 @@ public class PostCategory extends BaseEntity { private List postCategoryMappings; // -------------------- 생성자 -------------------- - public PostCategory(String name) { - this.name = name; - this.type = CategoryType.SUBJECT; - this.postCategoryMappings = new ArrayList<>(); - } - public PostCategory(String name, CategoryType type) { this.name = name; this.type = type; this.postCategoryMappings = new ArrayList<>(); } + + // -------------------- 연관관계 편의 메서드 -------------------- + public void addPostCategoryMapping(PostCategoryMapping mapping) { + this.postCategoryMappings.add(mapping); + } } \ No newline at end of file diff --git a/src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java b/src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java index 5af8c32f..6d0a60f8 100644 --- a/src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java +++ b/src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java @@ -7,8 +7,12 @@ @Entity @NoArgsConstructor @Getter +@Table( + uniqueConstraints = @UniqueConstraint(columnNames = {"post_id", "category_id"}) +) public class PostCategoryMapping { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @@ -23,5 +27,7 @@ public class PostCategoryMapping { public PostCategoryMapping(Post post, PostCategory category) { this.post = post; this.category = category; + post.addPostCategoryMapping(this); + category.addPostCategoryMapping(this); } } diff --git a/src/main/java/com/back/domain/board/post/entity/PostLike.java b/src/main/java/com/back/domain/board/post/entity/PostLike.java index 89a5e6b6..8c0d5712 100644 --- a/src/main/java/com/back/domain/board/post/entity/PostLike.java +++ b/src/main/java/com/back/domain/board/post/entity/PostLike.java @@ -2,10 +2,7 @@ import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -13,13 +10,23 @@ @Entity @Getter @NoArgsConstructor -@AllArgsConstructor +@Table( + uniqueConstraints = @UniqueConstraint(columnNames = {"post_id", "user_id"}) +) public class PostLike extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "post_id") + @JoinColumn(name = "post_id", nullable = false) private Post post; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", nullable = false) private User user; + + // -------------------- 생성자 -------------------- + public PostLike(Post post, User user) { + this.post = post; + this.user = user; + post.addLike(this); + user.addPostLike(this); + } } diff --git a/src/main/java/com/back/domain/board/post/repository/PostRepository.java b/src/main/java/com/back/domain/board/post/repository/PostRepository.java index 2137b980..7aafead2 100644 --- a/src/main/java/com/back/domain/board/post/repository/PostRepository.java +++ b/src/main/java/com/back/domain/board/post/repository/PostRepository.java @@ -1,6 +1,7 @@ package com.back.domain.board.post.repository; import com.back.domain.board.post.entity.Post; +import com.back.domain.board.post.repository.custom.PostRepositoryCustom; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/back/domain/board/post/repository/PostRepositoryCustom.java b/src/main/java/com/back/domain/board/post/repository/custom/PostRepositoryCustom.java similarity index 84% rename from src/main/java/com/back/domain/board/post/repository/PostRepositoryCustom.java rename to src/main/java/com/back/domain/board/post/repository/custom/PostRepositoryCustom.java index 527d34d9..d39277d9 100644 --- a/src/main/java/com/back/domain/board/post/repository/PostRepositoryCustom.java +++ b/src/main/java/com/back/domain/board/post/repository/custom/PostRepositoryCustom.java @@ -1,4 +1,4 @@ -package com.back.domain.board.post.repository; +package com.back.domain.board.post.repository.custom; import com.back.domain.board.post.dto.PostListResponse; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/back/domain/board/post/repository/PostRepositoryImpl.java b/src/main/java/com/back/domain/board/post/repository/custom/PostRepositoryImpl.java similarity index 99% rename from src/main/java/com/back/domain/board/post/repository/PostRepositoryImpl.java rename to src/main/java/com/back/domain/board/post/repository/custom/PostRepositoryImpl.java index 53806ffd..3310e2f3 100644 --- a/src/main/java/com/back/domain/board/post/repository/PostRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/post/repository/custom/PostRepositoryImpl.java @@ -1,4 +1,4 @@ -package com.back.domain.board.post.repository; +package com.back.domain.board.post.repository.custom; import com.back.domain.board.comment.entity.QComment; import com.back.domain.board.common.dto.QAuthorResponse; diff --git a/src/main/java/com/back/domain/board/post/service/PostBookmarkService.java b/src/main/java/com/back/domain/board/post/service/PostBookmarkService.java index 31323e62..54a44f18 100644 --- a/src/main/java/com/back/domain/board/post/service/PostBookmarkService.java +++ b/src/main/java/com/back/domain/board/post/service/PostBookmarkService.java @@ -72,6 +72,10 @@ public PostBookmarkResponse cancelBookmarkPost(Long postId, Long userId) { PostBookmark postBookmark = postBookmarkRepository.findByUserIdAndPostId(userId, postId) .orElseThrow(() -> new CustomException(ErrorCode.BOOKMARK_NOT_FOUND)); + // 연관관계 제거 + post.removeBookmark(postBookmark); + user.removePostBookmark(postBookmark); + // PostBookmark 삭제 postBookmarkRepository.delete(postBookmark); diff --git a/src/main/java/com/back/domain/board/post/service/PostLikeService.java b/src/main/java/com/back/domain/board/post/service/PostLikeService.java index 91e270e3..d1230eca 100644 --- a/src/main/java/com/back/domain/board/post/service/PostLikeService.java +++ b/src/main/java/com/back/domain/board/post/service/PostLikeService.java @@ -72,6 +72,10 @@ public PostLikeResponse cancelLikePost(Long postId, Long userId) { PostLike postLike = postLikeRepository.findByUserIdAndPostId(userId, postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_LIKE_NOT_FOUND)); + // 연관관계 제거 + post.removeLike(postLike); + user.removePostLike(postLike); + // PostLike 삭제 postLikeRepository.delete(postLike); diff --git a/src/main/java/com/back/domain/board/post/service/PostService.java b/src/main/java/com/back/domain/board/post/service/PostService.java index b53a88d3..a0568788 100644 --- a/src/main/java/com/back/domain/board/post/service/PostService.java +++ b/src/main/java/com/back/domain/board/post/service/PostService.java @@ -139,6 +139,10 @@ public PostResponse updatePost(Long postId, PostRequest request, Long userId) { * 3. Post 삭제 */ public void deletePost(Long postId, Long userId) { + // User 조회 + User user = userRepository.findById(userId) + .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); + // Post 조회 Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND)); @@ -148,6 +152,9 @@ public void deletePost(Long postId, Long userId) { throw new CustomException(ErrorCode.POST_NO_PERMISSION); } + // 연관관계 제거 + user.removePost(post); + // Post 삭제 postRepository.delete(post); } diff --git a/src/main/java/com/back/domain/user/entity/User.java b/src/main/java/com/back/domain/user/entity/User.java index bd77cb97..1d58629e 100644 --- a/src/main/java/com/back/domain/user/entity/User.java +++ b/src/main/java/com/back/domain/user/entity/User.java @@ -132,6 +132,51 @@ public void setUserProfile(UserProfile profile) { profile.setUser(this); } + public void addPost(Post post) { + if (this.posts == null) this.posts = new ArrayList<>(); + this.posts.add(post); + } + + public void removePost(Post post) { + this.posts.remove(post); + } + + public void addPostLike(PostLike like) { + if (this.postLikes == null) this.postLikes = new ArrayList<>(); + this.postLikes.add(like); + } + + public void removePostLike(PostLike like) { + this.postLikes.remove(like); + } + + public void addPostBookmark(PostBookmark bookmark) { + if (this.postBookmarks == null) this.postBookmarks = new ArrayList<>(); + this.postBookmarks.add(bookmark); + } + + public void removePostBookmark(PostBookmark bookmark) { + this.postBookmarks.remove(bookmark); + } + + public void addComment(Comment comment) { + if (this.comments == null) this.comments = new ArrayList<>(); + this.comments.add(comment); + } + + public void removeComment(Comment comment) { + this.comments.remove(comment); + } + + public void addCommentLike(CommentLike like) { + if (this.commentLikes == null) this.commentLikes = new ArrayList<>(); + this.commentLikes.add(like); + } + + public void removeCommentLike(CommentLike like) { + this.commentLikes.remove(like); + } + // -------------------- 헬퍼 메서드 -------------------- // 현재 사용자의 닉네임 조회 public String getNickname() { diff --git a/src/main/java/com/back/global/initData/DevInitData.java b/src/main/java/com/back/global/initData/DevInitData.java index c37d64bf..43e2a411 100644 --- a/src/main/java/com/back/global/initData/DevInitData.java +++ b/src/main/java/com/back/global/initData/DevInitData.java @@ -15,16 +15,22 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.core.env.Environment; +import org.springframework.core.io.ClassPathResource; +import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; import java.util.List; @Configuration @Profile("default") @RequiredArgsConstructor public class DevInitData { + private final DataSource dataSource; private final UserRepository userRepository; private final PostRepository postRepository; private final CommentRepository commentRepository; @@ -33,9 +39,39 @@ public class DevInitData { @Bean ApplicationRunner DevInitDataApplicationRunner() { - return args -> { - initUsersAndPostsAndComments(); - }; + return args -> initialize(); + } + + @Transactional + public void initialize() { + runDataSql(); + initUsersAndPostsAndComments(); + } + + private void runDataSql() { + try (Connection connection = dataSource.getConnection()) { + connection.setAutoCommit(true); + Statement stmt = connection.createStatement(); + + // post_category 테이블에 데이터 있는지 확인 + long count = postCategoryRepository.count(); + + if (count == 0) { + // 데이터가 없으면 data.sql 실행 + ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); + populator.addScript(new ClassPathResource("data.sql")); + populator.setContinueOnError(true); + populator.setIgnoreFailedDrops(true); + populator.execute(dataSource); + + System.out.println("✅ data.sql executed because table was empty!"); + } else { + System.out.println("ℹ️ Skipped data.sql (already has data: " + count + ")"); + } + + } catch (Exception e) { + System.err.println("⚠️ data.sql execution failed: " + e.getMessage()); + } } @Transactional @@ -69,27 +105,32 @@ public void initUsersAndPostsAndComments() { private void createSamplePosts(User user1, User user2, User user3) { Post post1 = new Post(user1, "[백엔드] 같이 스프링 공부하실 분 구해요!", - "매주 토요일 오후 2시에 온라인으로 스터디 진행합니다.\n교재는 '스프링 완전정복'을 사용할 예정입니다."); + "매주 토요일 오후 2시에 온라인으로 스터디 진행합니다.\n교재는 '스프링 완전정복'을 사용할 예정입니다.", + null); attachCategories(post1, List.of("백엔드", "직장인", "5~10명")); Post post2 = new Post(user2, "[프론트엔드] 리액트 입문 스터디원 모집", - "리액트 교재를 같이 읽고 실습해보는 스터디입니다. GitHub로 코드 리뷰도 진행합니다."); + "리액트 교재를 같이 읽고 실습해보는 스터디입니다. GitHub로 코드 리뷰도 진행합니다.", + null); attachCategories(post2, List.of("프론트엔드", "대학생", "2~4명")); Post post3 = new Post(user2, "[CS] 컴퓨터 구조 스터디", - "운영체제, 네트워크, 컴퓨터 구조 기본 개념을 함께 정리해요.\n스터디원 5명 정도 모집합니다."); + "운영체제, 네트워크, 컴퓨터 구조 기본 개념을 함께 정리해요.\n스터디원 5명 정도 모집합니다.", + null); attachCategories(post3, List.of("CS", "취준생", "5~10명")); Post post4 = new Post(user3, "[알고리즘] 백준 골드 도전 스터디", - "매주 3문제씩 풀이, 코드 리뷰 및 전략 공유합니다.\n실력 향상을 목표로 합니다!"); + "매주 3문제씩 풀이, 코드 리뷰 및 전략 공유합니다.\n실력 향상을 목표로 합니다!", + null); attachCategories(post4, List.of("알고리즘", "대학생", "5~10명")); Post post5 = new Post(user1, "[영어 회화] 직장인 아침 스터디", - "출근 전 30분, 영어회화 연습 스터디입니다.\n줌으로 진행하고 서로 피드백 나눠요 :)"); + "출근 전 30분, 영어회화 연습 스터디입니다.\n줌으로 진행하고 서로 피드백 나눠요 :)", + null); attachCategories(post5, List.of("영어 회화", "직장인", "2~4명")); postRepository.saveAll(List.of(post1, post2, post3, post4, post5)); @@ -100,15 +141,15 @@ private void createSamplePosts(User user1, User user2, User user3) { private void createSampleComments(User user1, User user2, User user3, Post post1, Post post2, Post post3) { // Post1에 댓글 - Comment comment1 = new Comment(post1, user2, "저도 참여하고 싶어요!"); - Comment reply1 = new Comment(post1, user1, "좋아요 :) 디스코드 링크 드릴게요.", comment1); + Comment comment1 = Comment.createRoot(post1, user2, "저도 참여하고 싶어요!"); + Comment reply1 = Comment.createChild(post1, user1, "좋아요 :) 디스코드 링크 드릴게요.", comment1); // Post2에 댓글 - Comment comment2 = new Comment(post2, user3, "스터디 모집 기간은 언제까지인가요?"); - Comment reply2 = new Comment(post2, user2, "이번 주 일요일까지 받을 예정이에요.", comment2); + Comment comment2 = Comment.createRoot(post2, user3, "스터디 모집 기간은 언제까지인가요?"); + Comment reply2 = Comment.createChild(post2, user2, "이번 주 일요일까지 받을 예정이에요.", comment2); // Post3에 댓글 - Comment comment3 = new Comment(post3, user1, "CS는 항상 중요하죠 💪"); + Comment comment3 = Comment.createRoot(post3, user1, "CS는 항상 중요하죠 💪"); commentRepository.saveAll(List.of(comment1, reply1, comment2, reply2, comment3)); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 345314e7..b00f1c8a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -30,7 +30,7 @@ spring: sql: init: - mode: always + mode: never security: oauth2: diff --git a/src/test/java/com/back/domain/board/controller/CommentControllerTest.java b/src/test/java/com/back/domain/board/comment/controller/CommentControllerTest.java similarity index 91% rename from src/test/java/com/back/domain/board/controller/CommentControllerTest.java rename to src/test/java/com/back/domain/board/comment/controller/CommentControllerTest.java index 1a260a45..4baecf8e 100644 --- a/src/test/java/com/back/domain/board/controller/CommentControllerTest.java +++ b/src/test/java/com/back/domain/board/comment/controller/CommentControllerTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.controller; +package com.back.domain.board.comment.controller; import com.back.domain.board.comment.dto.CommentRequest; import com.back.domain.board.comment.entity.Comment; @@ -76,7 +76,7 @@ void createComment_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "첫 글", "내용"); + Post post = new Post(user, "첫 글", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -110,7 +110,7 @@ void createComment_userNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // DB에 없는 userId 기반 토큰 @@ -162,7 +162,7 @@ void createComment_badRequest() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -193,7 +193,7 @@ void createComment_noToken() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); CommentRequest request = new CommentRequest("댓글 내용"); @@ -219,15 +219,15 @@ void getComments_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // 부모 댓글 - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); // 자식 댓글 - Comment child = new Comment(post, user, "자식 댓글", parent); + Comment child = Comment.createChild(post, user, "자식 댓글", parent); commentRepository.save(child); String accessToken = generateAccessToken(user); @@ -278,10 +278,10 @@ void updateComment_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "원래 댓글 내용"); + Comment comment = Comment.createRoot(post, user, "원래 댓글 내용"); commentRepository.save(comment); String accessToken = generateAccessToken(user); @@ -312,10 +312,10 @@ void updateComment_postNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); String accessToken = generateAccessToken(user); @@ -341,7 +341,7 @@ void updateComment_commentNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -372,10 +372,10 @@ void updateComment_noPermission() throws Exception { other.setUserStatus(UserStatus.ACTIVE); userRepository.save(other); - Post post = new Post(writer, "제목", "내용"); + Post post = new Post(writer, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, writer, "원래 댓글"); + Comment comment = Comment.createRoot(post, writer, "원래 댓글"); commentRepository.save(comment); String accessToken = generateAccessToken(other); @@ -401,10 +401,10 @@ void updateComment_badRequest() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); String accessToken = generateAccessToken(user); @@ -433,10 +433,10 @@ void updateComment_noToken() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); CommentRequest updateRequest = new CommentRequest("수정된 댓글"); @@ -462,10 +462,10 @@ void deleteComment_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "삭제할 댓글"); + Comment comment = Comment.createRoot(post, user, "삭제할 댓글"); commentRepository.save(comment); String accessToken = generateAccessToken(user); @@ -489,10 +489,10 @@ void deleteComment_postNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); String accessToken = generateAccessToken(user); @@ -515,7 +515,7 @@ void deleteComment_commentNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -543,10 +543,10 @@ void deleteComment_noPermission() throws Exception { other.setUserStatus(UserStatus.ACTIVE); userRepository.save(other); - Post post = new Post(writer, "제목", "내용"); + Post post = new Post(writer, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, writer, "원래 댓글"); + Comment comment = Comment.createRoot(post, writer, "원래 댓글"); commentRepository.save(comment); String accessToken = generateAccessToken(other); @@ -569,10 +569,10 @@ void deleteComment_noToken() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); // when & then @@ -594,10 +594,10 @@ void createReply_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "첫 글", "내용"); + Post post = new Post(user, "첫 글", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); String accessToken = generateAccessToken(user); @@ -632,10 +632,10 @@ void createReply_userNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); // DB에 없는 userId로 JWT 발급 @@ -663,10 +663,10 @@ void createReply_postNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); String accessToken = generateAccessToken(user); @@ -692,7 +692,7 @@ void createReply_commentNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -718,11 +718,11 @@ void createReply_parentMismatch() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post1 = new Post(user, "게시글1", "내용1"); - Post post2 = new Post(user, "게시글2", "내용2"); + Post post1 = new Post(user, "게시글1", "내용1", null); + Post post2 = new Post(user, "게시글2", "내용2", null); postRepository.saveAll(List.of(post1, post2)); - Comment parent = new Comment(post1, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post1, user, "부모 댓글"); commentRepository.save(parent); String accessToken = generateAccessToken(user); @@ -748,11 +748,11 @@ void createReply_depthExceeded() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); - Comment child = new Comment(post, user, "대댓글1", parent); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); + Comment child = Comment.createChild(post, user, "대댓글1", parent); commentRepository.saveAll(List.of(parent, child)); String accessToken = generateAccessToken(user); @@ -778,10 +778,10 @@ void createReply_badRequest() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); String accessToken = generateAccessToken(user); @@ -808,10 +808,10 @@ void createReply_noToken() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); CommentRequest request = new CommentRequest("대댓글 내용"); @@ -835,11 +835,11 @@ void updateReply_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); - Comment reply = new Comment(post, user, "대댓글", parent); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); + Comment reply = Comment.createChild(post, user, "대댓글", parent); commentRepository.saveAll(List.of(parent, reply)); String accessToken = generateAccessToken(user); @@ -864,11 +864,11 @@ void deleteReply_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); - Comment reply = new Comment(post, user, "대댓글", parent); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); + Comment reply = Comment.createChild(post, user, "대댓글", parent); commentRepository.saveAll(List.of(parent, reply)); String accessToken = generateAccessToken(user); diff --git a/src/test/java/com/back/domain/board/controller/CommentLikeControllerTest.java b/src/test/java/com/back/domain/board/comment/controller/CommentLikeControllerTest.java similarity index 93% rename from src/test/java/com/back/domain/board/controller/CommentLikeControllerTest.java rename to src/test/java/com/back/domain/board/comment/controller/CommentLikeControllerTest.java index 5ccdd76c..610e4472 100644 --- a/src/test/java/com/back/domain/board/controller/CommentLikeControllerTest.java +++ b/src/test/java/com/back/domain/board/comment/controller/CommentLikeControllerTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.controller; +package com.back.domain.board.comment.controller; import com.back.domain.board.comment.entity.Comment; import com.back.domain.board.comment.repository.CommentLikeRepository; @@ -71,7 +71,7 @@ private User createUser(String username, String email) { } private Post createPost(User user) { - Post post = new Post(user, "게시글 제목", "게시글 내용"); + Post post = new Post(user, "게시글 제목", "게시글 내용", null); return postRepository.save(post); } @@ -82,7 +82,7 @@ private Post createPost(User user) { void likeComment_success() throws Exception { User user = createUser("writer", "writer@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글 내용")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글 내용")); String token = generateAccessToken(user); @@ -107,7 +107,7 @@ void likeComment_success() throws Exception { void likeComment_fail_userNotFound() throws Exception { User user = createUser("temp", "temp@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); String fakeToken = testJwtTokenProvider.createAccessToken(999L, "ghost", "USER"); @@ -141,7 +141,7 @@ void likeComment_fail_commentNotFound() throws Exception { void likeComment_fail_alreadyLiked() throws Exception { User user = createUser("user", "user@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); String token = generateAccessToken(user); mvc.perform(post("/api/posts/{postId}/comments/{commentId}/like", post.getId(), comment.getId()) @@ -179,7 +179,7 @@ void likeComment_fail_badRequest() throws Exception { void likeComment_fail_noToken() throws Exception { User user = createUser("user", "user@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); mvc.perform(post("/api/posts/{postId}/comments/{commentId}/like", post.getId(), comment.getId()) .contentType(MediaType.APPLICATION_JSON)) @@ -194,7 +194,7 @@ void likeComment_fail_noToken() throws Exception { void likeComment_fail_invalidToken() throws Exception { User user = createUser("user", "user@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); mvc.perform(post("/api/posts/{postId}/comments/{commentId}/like", post.getId(), comment.getId()) .header("Authorization", "Bearer invalid.token.here") @@ -213,7 +213,7 @@ void cancelLikeComment_success() throws Exception { // given User user = createUser("cancel", "cancel@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); String token = generateAccessToken(user); // 좋아요 등록 @@ -245,7 +245,7 @@ void cancelLikeComment_fail_notLiked() throws Exception { // given User user = createUser("user2", "user2@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); String token = generateAccessToken(user); // when & then @@ -265,7 +265,7 @@ void cancelLikeComment_fail_userNotFound() throws Exception { // given User user = createUser("temp", "temp@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); String fakeToken = testJwtTokenProvider.createAccessToken(999L, "ghost", "USER"); // when & then @@ -304,7 +304,7 @@ void cancelLikeComment_fail_noToken() throws Exception { // given User user = createUser("writer", "writer@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); // when & then mvc.perform(delete("/api/posts/{postId}/comments/{commentId}/like", post.getId(), comment.getId()) @@ -321,7 +321,7 @@ void cancelLikeComment_fail_invalidToken() throws Exception { // given User user = createUser("writer", "writer@example.com"); Post post = createPost(user); - Comment comment = commentRepository.save(new Comment(post, user, "댓글")); + Comment comment = commentRepository.save(Comment.createRoot(post, user, "댓글")); // when & then mvc.perform(delete("/api/posts/{postId}/comments/{commentId}/like", post.getId(), comment.getId()) diff --git a/src/test/java/com/back/domain/board/service/CommentLikeServiceTest.java b/src/test/java/com/back/domain/board/comment/service/CommentLikeServiceTest.java similarity index 97% rename from src/test/java/com/back/domain/board/service/CommentLikeServiceTest.java rename to src/test/java/com/back/domain/board/comment/service/CommentLikeServiceTest.java index c0c64ac4..cf8b015b 100644 --- a/src/test/java/com/back/domain/board/service/CommentLikeServiceTest.java +++ b/src/test/java/com/back/domain/board/comment/service/CommentLikeServiceTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.service; +package com.back.domain.board.comment.service; import com.back.domain.board.comment.dto.CommentLikeResponse; import com.back.domain.board.comment.entity.Comment; @@ -54,10 +54,10 @@ void setUp() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - post = new Post(user, "게시글 제목", "게시글 내용"); + post = new Post(user, "게시글 제목", "게시글 내용", null); postRepository.save(post); - comment = new Comment(post, user, "댓글 내용"); + comment = Comment.createRoot(post, user, "댓글 내용"); commentRepository.save(comment); } diff --git a/src/test/java/com/back/domain/board/service/CommentServiceTest.java b/src/test/java/com/back/domain/board/comment/service/CommentServiceTest.java similarity index 88% rename from src/test/java/com/back/domain/board/service/CommentServiceTest.java rename to src/test/java/com/back/domain/board/comment/service/CommentServiceTest.java index 87e32a26..bb2e71a4 100644 --- a/src/test/java/com/back/domain/board/service/CommentServiceTest.java +++ b/src/test/java/com/back/domain/board/comment/service/CommentServiceTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.service; +package com.back.domain.board.comment.service; import com.back.domain.board.comment.dto.CommentListResponse; import com.back.domain.board.comment.dto.CommentRequest; @@ -63,7 +63,7 @@ void createComment_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); CommentRequest request = new CommentRequest("댓글 내용"); @@ -86,7 +86,7 @@ void createComment_fail_userNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); CommentRequest request = new CommentRequest("댓글 내용"); @@ -125,15 +125,15 @@ void getComments_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // 부모 댓글 - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); // 자식 댓글 - Comment child = new Comment(post, user, "자식 댓글", parent); + Comment child = Comment.createChild(post, user, "자식 댓글", parent); commentRepository.save(child); Pageable pageable = PageRequest.of(0, 10, Sort.by(Sort.Direction.ASC, "createdAt")); @@ -171,10 +171,10 @@ void updateComment_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "원래 댓글"); + Comment comment = Comment.createRoot(post, user, "원래 댓글"); commentRepository.save(comment); CommentRequest updateRequest = new CommentRequest("수정된 댓글"); @@ -196,10 +196,10 @@ void updateComment_fail_postNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); CommentRequest updateRequest = new CommentRequest("수정된 댓글"); @@ -220,7 +220,7 @@ void updateComment_fail_commentNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); CommentRequest updateRequest = new CommentRequest("수정된 댓글"); @@ -246,10 +246,10 @@ void updateComment_fail_noPermission() { other.setUserStatus(UserStatus.ACTIVE); userRepository.save(other); - Post post = new Post(writer, "제목", "내용"); + Post post = new Post(writer, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, writer, "원래 댓글"); + Comment comment = Comment.createRoot(post, writer, "원래 댓글"); commentRepository.save(comment); CommentRequest updateRequest = new CommentRequest("수정된 댓글"); @@ -272,10 +272,10 @@ void deleteComment_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "삭제할 댓글"); + Comment comment = Comment.createRoot(post, user, "삭제할 댓글"); commentRepository.save(comment); // when @@ -294,10 +294,10 @@ void deleteComment_fail_postNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, user, "댓글"); + Comment comment = Comment.createRoot(post, user, "댓글"); commentRepository.save(comment); // when & then @@ -316,7 +316,7 @@ void deleteComment_fail_commentNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // when & then @@ -340,10 +340,10 @@ void deleteComment_fail_noPermission() { other.setUserStatus(UserStatus.ACTIVE); userRepository.save(other); - Post post = new Post(writer, "제목", "내용"); + Post post = new Post(writer, "제목", "내용", null); postRepository.save(post); - Comment comment = new Comment(post, writer, "원래 댓글"); + Comment comment = Comment.createRoot(post, writer, "원래 댓글"); commentRepository.save(comment); // when & then @@ -364,10 +364,10 @@ void createReply_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); commentRepository.save(parent); CommentRequest request = new CommentRequest("대댓글 내용"); @@ -391,11 +391,11 @@ void createReply_fail_parentMismatch() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post1 = new Post(user, "게시글1", "내용1"); - Post post2 = new Post(user, "게시글2", "내용2"); + Post post1 = new Post(user, "게시글1", "내용1", null); + Post post2 = new Post(user, "게시글2", "내용2", null); postRepository.saveAll(List.of(post1, post2)); - Comment parent = new Comment(post1, user, "부모 댓글", null); + Comment parent = Comment.createRoot(post1, user, "부모 댓글"); commentRepository.save(parent); CommentRequest request = new CommentRequest("대댓글 내용"); @@ -415,12 +415,12 @@ void createReply_fail_depthExceeded() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // 부모 댓글 + 그 부모의 대댓글까지 생성 - Comment parent = new Comment(post, user, "부모 댓글", null); - Comment child = new Comment(post, user, "대댓글1", parent); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); + Comment child = Comment.createChild(post, user, "대댓글1", parent); commentRepository.saveAll(List.of(parent, child)); CommentRequest request = new CommentRequest("대댓글2 내용"); @@ -440,7 +440,7 @@ void createReply_fail_commentNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); CommentRequest request = new CommentRequest("대댓글 내용"); @@ -460,11 +460,11 @@ void updateReply_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); - Comment reply = new Comment(post, user, "대댓글", parent); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); + Comment reply = Comment.createChild(post, user, "대댓글", parent); commentRepository.saveAll(List.of(parent, reply)); CommentRequest updateRequest = new CommentRequest("수정된 대댓글 내용"); @@ -487,11 +487,11 @@ void deleteReply_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); - Comment parent = new Comment(post, user, "부모 댓글", null); - Comment reply = new Comment(post, user, "삭제할 대댓글", parent); + Comment parent = Comment.createRoot(post, user, "부모 댓글"); + Comment reply = Comment.createChild(post, user, "삭제할 대댓글", parent); commentRepository.saveAll(List.of(parent, reply)); // when diff --git a/src/test/java/com/back/domain/board/controller/PostBookmarkControllerTest.java b/src/test/java/com/back/domain/board/post/controller/PostBookmarkControllerTest.java similarity index 97% rename from src/test/java/com/back/domain/board/controller/PostBookmarkControllerTest.java rename to src/test/java/com/back/domain/board/post/controller/PostBookmarkControllerTest.java index e04c3bac..dfb0b96f 100644 --- a/src/test/java/com/back/domain/board/controller/PostBookmarkControllerTest.java +++ b/src/test/java/com/back/domain/board/post/controller/PostBookmarkControllerTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.controller; +package com.back.domain.board.post.controller; import com.back.domain.board.post.entity.Post; import com.back.domain.user.entity.User; @@ -63,7 +63,7 @@ void bookmarkPost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "북마크 테스트", "내용입니다"); + Post post = new Post(user, "북마크 테스트", "내용입니다", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -90,7 +90,7 @@ void bookmarkPost_userNotFound() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "게시글", "내용"); + Post post = new Post(writer, "게시글", "내용", null); postRepository.save(post); mvc.perform(post("/api/posts/{postId}/bookmark", post.getId()) @@ -128,7 +128,7 @@ void bookmarkPost_alreadyBookmarked() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "테스트 게시글", "내용"); + Post post = new Post(user, "테스트 게시글", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -153,7 +153,7 @@ void bookmarkPost_noToken() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "테스트", "내용"); + Post post = new Post(writer, "테스트", "내용", null); postRepository.save(post); mvc.perform(post("/api/posts/{postId}/bookmark", post.getId()) @@ -193,7 +193,7 @@ void cancelBookmarkPost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "북마크 취소 테스트", "내용"); + Post post = new Post(user, "북마크 취소 테스트", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -222,7 +222,7 @@ void cancelBookmarkPost_userNotFound() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "게시글", "내용"); + Post post = new Post(writer, "게시글", "내용", null); postRepository.save(post); mvc.perform(delete("/api/posts/{postId}/bookmark", post.getId()) @@ -259,7 +259,7 @@ void cancelBookmarkPost_notFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "테스트", "내용"); + Post post = new Post(user, "테스트", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -279,7 +279,7 @@ void cancelBookmarkPost_noToken() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "테스트", "내용"); + Post post = new Post(writer, "테스트", "내용", null); postRepository.save(post); mvc.perform(delete("/api/posts/{postId}/bookmark", post.getId()) diff --git a/src/test/java/com/back/domain/board/controller/PostCategoryControllerTest.java b/src/test/java/com/back/domain/board/post/controller/PostCategoryControllerTest.java similarity index 99% rename from src/test/java/com/back/domain/board/controller/PostCategoryControllerTest.java rename to src/test/java/com/back/domain/board/post/controller/PostCategoryControllerTest.java index ab660580..93f32c89 100644 --- a/src/test/java/com/back/domain/board/controller/PostCategoryControllerTest.java +++ b/src/test/java/com/back/domain/board/post/controller/PostCategoryControllerTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.controller; +package com.back.domain.board.post.controller; import com.back.domain.board.post.dto.CategoryRequest; import com.back.domain.board.post.enums.CategoryType; diff --git a/src/test/java/com/back/domain/board/controller/PostControllerTest.java b/src/test/java/com/back/domain/board/post/controller/PostControllerTest.java similarity index 95% rename from src/test/java/com/back/domain/board/controller/PostControllerTest.java rename to src/test/java/com/back/domain/board/post/controller/PostControllerTest.java index a68ab208..92bbac0d 100644 --- a/src/test/java/com/back/domain/board/controller/PostControllerTest.java +++ b/src/test/java/com/back/domain/board/post/controller/PostControllerTest.java @@ -1,8 +1,9 @@ -package com.back.domain.board.controller; +package com.back.domain.board.post.controller; import com.back.domain.board.post.dto.PostRequest; import com.back.domain.board.post.entity.Post; import com.back.domain.board.post.entity.PostCategory; +import com.back.domain.board.post.enums.CategoryType; import com.back.domain.board.post.repository.PostCategoryRepository; import com.back.domain.board.post.repository.PostRepository; import com.back.domain.user.entity.User; @@ -75,10 +76,10 @@ void createPost_success() throws Exception { String accessToken = generateAccessToken(user); // 카테고리 등록 - PostCategory c1 = new PostCategory("공지사항"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); postCategoryRepository.save(c1); - PostCategory c2 = new PostCategory("자유게시판"); + PostCategory c2 = new PostCategory("자유게시판", CategoryType.SUBJECT); postCategoryRepository.save(c2); PostRequest request = new PostRequest("첫 번째 게시글", "안녕하세요, 첫 글입니다!", null, List.of(c1.getId(), c2.getId())); @@ -201,15 +202,15 @@ void getPosts_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory c1 = new PostCategory("공지사항"); - PostCategory c2 = new PostCategory("자유게시판"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); + PostCategory c2 = new PostCategory("자유게시판", CategoryType.SUBJECT); postCategoryRepository.saveAll(List.of(c1, c2)); - Post post1 = new Post(user, "첫 글", "내용1"); + Post post1 = new Post(user, "첫 글", "내용1", null); post1.updateCategories(List.of(c1)); postRepository.save(post1); - Post post2 = new Post(user, "두 번째 글", "내용2"); + Post post2 = new Post(user, "두 번째 글", "내용2", null); post2.updateCategories(List.of(c2)); postRepository.save(post2); @@ -236,10 +237,10 @@ void getPost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory c1 = new PostCategory("공지사항"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); postCategoryRepository.save(c1); - Post post = new Post(user, "조회 테스트 글", "조회 테스트 내용"); + Post post = new Post(user, "조회 테스트 글", "조회 테스트 내용", null); post.updateCategories(List.of(c1)); postRepository.save(post); @@ -279,16 +280,16 @@ void updatePost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory c1 = new PostCategory("공지사항"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); postCategoryRepository.save(c1); - Post post = new Post(user, "원래 제목", "원래 내용"); + Post post = new Post(user, "원래 제목", "원래 내용", null); post.updateCategories(List.of(c1)); postRepository.save(post); String accessToken = generateAccessToken(user); - PostCategory c2 = new PostCategory("자유게시판"); + PostCategory c2 = new PostCategory("자유게시판", CategoryType.SUBJECT); postCategoryRepository.save(c2); PostRequest request = new PostRequest("수정된 게시글", "안녕하세요, 수정했습니다!", null, List.of(c1.getId(), c2.getId())); @@ -344,10 +345,10 @@ void updatePost_fail_noPermission() throws Exception { another.setUserStatus(UserStatus.ACTIVE); userRepository.save(another); - PostCategory c1 = new PostCategory("공지사항"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); postCategoryRepository.save(c1); - Post post = new Post(writer, "원래 제목", "원래 내용"); + Post post = new Post(writer, "원래 제목", "원래 내용", null); post.updateCategories(List.of(c1)); postRepository.save(post); @@ -375,10 +376,10 @@ void updatePost_fail_categoryNotFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory c1 = new PostCategory("공지사항"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); postCategoryRepository.save(c1); - Post post = new Post(user, "원래 제목", "원래 내용"); + Post post = new Post(user, "원래 제목", "원래 내용", null); post.updateCategories(List.of(c1)); postRepository.save(post); @@ -453,7 +454,7 @@ void deletePost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "삭제할 제목", "삭제할 내용"); + Post post = new Post(user, "삭제할 제목", "삭제할 내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -503,7 +504,7 @@ void deletePost_fail_noPermission() throws Exception { another.setUserStatus(UserStatus.ACTIVE); userRepository.save(another); - Post post = new Post(writer, "원래 제목", "원래 내용"); + Post post = new Post(writer, "원래 제목", "원래 내용", null); postRepository.save(post); String accessToken = generateAccessToken(another); diff --git a/src/test/java/com/back/domain/board/controller/PostLikeControllerTest.java b/src/test/java/com/back/domain/board/post/controller/PostLikeControllerTest.java similarity index 97% rename from src/test/java/com/back/domain/board/controller/PostLikeControllerTest.java rename to src/test/java/com/back/domain/board/post/controller/PostLikeControllerTest.java index 8a1aad20..cb106cd8 100644 --- a/src/test/java/com/back/domain/board/controller/PostLikeControllerTest.java +++ b/src/test/java/com/back/domain/board/post/controller/PostLikeControllerTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.controller; +package com.back.domain.board.post.controller; import com.back.domain.board.post.entity.Post; import com.back.domain.board.post.repository.PostRepository; @@ -64,7 +64,7 @@ void likePost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "좋아요 테스트", "내용입니다"); + Post post = new Post(user, "좋아요 테스트", "내용입니다", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -95,7 +95,7 @@ void likePost_userNotFound() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "게시글", "내용"); + Post post = new Post(writer, "게시글", "내용", null); postRepository.save(post); // when & then @@ -137,7 +137,7 @@ void likePost_alreadyLiked() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "테스트 게시글", "내용"); + Post post = new Post(user, "테스트 게시글", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -165,7 +165,7 @@ void likePost_noToken() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "테스트", "내용"); + Post post = new Post(writer, "테스트", "내용", null); postRepository.save(post); // when & then @@ -188,7 +188,7 @@ void cancelLikePost_success() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "좋아요 취소 테스트", "내용입니다"); + Post post = new Post(user, "좋아요 취소 테스트", "내용입니다", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -223,7 +223,7 @@ void cancelLikePost_userNotFound() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "게시글", "내용"); + Post post = new Post(writer, "게시글", "내용", null); postRepository.save(post); // when & then @@ -263,7 +263,7 @@ void cancelLikePost_notFound() throws Exception { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "테스트 게시글", "내용"); + Post post = new Post(user, "테스트 게시글", "내용", null); postRepository.save(post); String accessToken = generateAccessToken(user); @@ -286,7 +286,7 @@ void cancelLikePost_noToken() throws Exception { writer.setUserStatus(UserStatus.ACTIVE); userRepository.save(writer); - Post post = new Post(writer, "테스트", "내용"); + Post post = new Post(writer, "테스트", "내용", null); postRepository.save(post); // when & then diff --git a/src/test/java/com/back/domain/board/service/PostBookmarkServiceTest.java b/src/test/java/com/back/domain/board/post/service/PostBookmarkServiceTest.java similarity index 94% rename from src/test/java/com/back/domain/board/service/PostBookmarkServiceTest.java rename to src/test/java/com/back/domain/board/post/service/PostBookmarkServiceTest.java index 64934a95..023da49f 100644 --- a/src/test/java/com/back/domain/board/service/PostBookmarkServiceTest.java +++ b/src/test/java/com/back/domain/board/post/service/PostBookmarkServiceTest.java @@ -1,11 +1,10 @@ -package com.back.domain.board.service; +package com.back.domain.board.post.service; import com.back.domain.board.post.dto.PostBookmarkResponse; import com.back.domain.board.post.entity.Post; import com.back.domain.board.post.entity.PostBookmark; import com.back.domain.board.post.repository.PostBookmarkRepository; import com.back.domain.board.post.repository.PostRepository; -import com.back.domain.board.post.service.PostBookmarkService; import com.back.domain.user.entity.User; import com.back.domain.user.entity.UserProfile; import com.back.domain.user.entity.UserStatus; @@ -49,7 +48,7 @@ void bookmarkPost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // when @@ -84,7 +83,7 @@ void bookmarkPost_fail_alreadyBookmarked() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); postBookmarkRepository.save(new PostBookmark(post, user)); @@ -106,7 +105,7 @@ void cancelBookmarkPost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); PostBookmark postBookmark = new PostBookmark(post, user); @@ -130,7 +129,7 @@ void cancelBookmarkPost_fail_notFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // when & then diff --git a/src/test/java/com/back/domain/board/service/PostCategoryServiceTest.java b/src/test/java/com/back/domain/board/post/service/PostCategoryServiceTest.java similarity index 97% rename from src/test/java/com/back/domain/board/service/PostCategoryServiceTest.java rename to src/test/java/com/back/domain/board/post/service/PostCategoryServiceTest.java index 75993511..f62d47b4 100644 --- a/src/test/java/com/back/domain/board/service/PostCategoryServiceTest.java +++ b/src/test/java/com/back/domain/board/post/service/PostCategoryServiceTest.java @@ -1,11 +1,10 @@ -package com.back.domain.board.service; +package com.back.domain.board.post.service; import com.back.domain.board.post.dto.CategoryRequest; import com.back.domain.board.post.dto.CategoryResponse; import com.back.domain.board.post.enums.CategoryType; import com.back.domain.board.post.entity.PostCategory; import com.back.domain.board.post.repository.PostCategoryRepository; -import com.back.domain.board.post.service.PostCategoryService; import com.back.domain.user.entity.User; import com.back.domain.user.entity.UserProfile; import com.back.domain.user.entity.UserStatus; diff --git a/src/test/java/com/back/domain/board/service/PostLikeServiceTest.java b/src/test/java/com/back/domain/board/post/service/PostLikeServiceTest.java similarity index 93% rename from src/test/java/com/back/domain/board/service/PostLikeServiceTest.java rename to src/test/java/com/back/domain/board/post/service/PostLikeServiceTest.java index a1db83bf..4b017322 100644 --- a/src/test/java/com/back/domain/board/service/PostLikeServiceTest.java +++ b/src/test/java/com/back/domain/board/post/service/PostLikeServiceTest.java @@ -1,11 +1,10 @@ -package com.back.domain.board.service; +package com.back.domain.board.post.service; import com.back.domain.board.post.dto.PostLikeResponse; import com.back.domain.board.post.entity.Post; import com.back.domain.board.post.entity.PostLike; import com.back.domain.board.post.repository.PostLikeRepository; import com.back.domain.board.post.repository.PostRepository; -import com.back.domain.board.post.service.PostLikeService; import com.back.domain.user.entity.User; import com.back.domain.user.entity.UserProfile; import com.back.domain.user.entity.UserStatus; @@ -49,7 +48,7 @@ void likePost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // when @@ -84,7 +83,7 @@ void likePost_fail_alreadyLiked() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); postLikeRepository.save(new PostLike(post, user)); @@ -106,7 +105,7 @@ void cancelLikePost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); PostLike postLike = new PostLike(post, user); @@ -130,7 +129,7 @@ void cancelLikePost_fail_notFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // when & then diff --git a/src/test/java/com/back/domain/board/service/PostServiceTest.java b/src/test/java/com/back/domain/board/post/service/PostServiceTest.java similarity index 92% rename from src/test/java/com/back/domain/board/service/PostServiceTest.java rename to src/test/java/com/back/domain/board/post/service/PostServiceTest.java index db8ef620..634c799d 100644 --- a/src/test/java/com/back/domain/board/service/PostServiceTest.java +++ b/src/test/java/com/back/domain/board/post/service/PostServiceTest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.service; +package com.back.domain.board.post.service; import com.back.domain.board.common.dto.PageResponse; import com.back.domain.board.post.entity.Post; @@ -7,9 +7,9 @@ import com.back.domain.board.post.dto.PostListResponse; import com.back.domain.board.post.dto.PostRequest; import com.back.domain.board.post.dto.PostResponse; +import com.back.domain.board.post.enums.CategoryType; import com.back.domain.board.post.repository.PostCategoryRepository; import com.back.domain.board.post.repository.PostRepository; -import com.back.domain.board.post.service.PostService; import com.back.domain.user.entity.User; import com.back.domain.user.entity.UserProfile; import com.back.domain.user.entity.UserStatus; @@ -58,7 +58,7 @@ void createPost_success_withCategories() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory category = new PostCategory("공지"); + PostCategory category = new PostCategory("공지", CategoryType.SUBJECT); postCategoryRepository.save(category); PostRequest request = new PostRequest("제목", "내용", null, List.of(category.getId())); @@ -116,15 +116,15 @@ void getPosts_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory c1 = new PostCategory("공지사항"); - PostCategory c2 = new PostCategory("자유게시판"); + PostCategory c1 = new PostCategory("공지사항", CategoryType.SUBJECT); + PostCategory c2 = new PostCategory("자유게시판", CategoryType.SUBJECT); postCategoryRepository.saveAll(List.of(c1, c2)); - Post post1 = new Post(user, "첫 번째 글", "내용1"); + Post post1 = new Post(user, "첫 번째 글", "내용1", null); post1.updateCategories(List.of(c1)); postRepository.save(post1); - Post post2 = new Post(user, "두 번째 글", "내용2"); + Post post2 = new Post(user, "두 번째 글", "내용2", null); post2.updateCategories(List.of(c2)); postRepository.save(post2); @@ -148,10 +148,10 @@ void getPost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory category = new PostCategory("공지"); + PostCategory category = new PostCategory("공지", CategoryType.SUBJECT); postCategoryRepository.save(category); - Post post = new Post(user, "조회용 제목", "조회용 내용"); + Post post = new Post(user, "조회용 제목", "조회용 내용", null); post.updateCategories(List.of(category)); postRepository.save(post); @@ -189,11 +189,11 @@ void updatePost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory oldCategory = new PostCategory("공지"); - PostCategory newCategory = new PostCategory("자유"); + PostCategory oldCategory = new PostCategory("공지", CategoryType.SUBJECT); + PostCategory newCategory = new PostCategory("자유", CategoryType.SUBJECT); postCategoryRepository.saveAll(List.of(oldCategory, newCategory)); - Post post = new Post(user, "원래 제목", "원래 내용"); + Post post = new Post(user, "원래 제목", "원래 내용", null); post.updateCategories(List.of(oldCategory)); postRepository.save(post); @@ -241,10 +241,10 @@ void updatePost_fail_noPermission() { another.setUserStatus(UserStatus.ACTIVE); userRepository.save(another); - PostCategory category = new PostCategory("공지"); + PostCategory category = new PostCategory("공지", CategoryType.SUBJECT); postCategoryRepository.save(category); - Post post = new Post(writer, "원래 제목", "원래 내용"); + Post post = new Post(writer, "원래 제목", "원래 내용", null); post.updateCategories(List.of(category)); postRepository.save(post); @@ -265,10 +265,10 @@ void updatePost_fail_categoryNotFound() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - PostCategory category = new PostCategory("공지"); + PostCategory category = new PostCategory("공지", CategoryType.SUBJECT); postCategoryRepository.save(category); - Post post = new Post(user, "원래 제목", "원래 내용"); + Post post = new Post(user, "원래 제목", "원래 내용", null); post.updateCategories(List.of(category)); postRepository.save(post); @@ -292,7 +292,7 @@ void deletePost_success() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "삭제 대상 제목", "삭제 대상 내용"); + Post post = new Post(user, "삭제 대상 제목", "삭제 대상 내용", null); postRepository.save(post); // when @@ -331,7 +331,7 @@ void deletePost_fail_noPermission() { another.setUserStatus(UserStatus.ACTIVE); userRepository.save(another); - Post post = new Post(writer, "원래 제목", "원래 내용"); + Post post = new Post(writer, "원래 제목", "원래 내용", null); postRepository.save(post); // when & then diff --git a/src/test/java/com/back/domain/file/service/FileServiceTest.java b/src/test/java/com/back/domain/file/service/FileServiceTest.java index a0997f86..00fb020b 100644 --- a/src/test/java/com/back/domain/file/service/FileServiceTest.java +++ b/src/test/java/com/back/domain/file/service/FileServiceTest.java @@ -65,7 +65,7 @@ void uploadFile() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); String path = "test.png"; @@ -90,7 +90,7 @@ void readFile() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); String path = "test.png"; @@ -115,7 +115,7 @@ void updateFile() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // 기존(삭제할) 파일 정보 @@ -147,7 +147,7 @@ void deleteFile() { user.setUserStatus(UserStatus.ACTIVE); userRepository.save(user); - Post post = new Post(user, "제목", "내용"); + Post post = new Post(user, "제목", "내용", null); postRepository.save(post); // 기존(삭제할) 파일 정보