From 02e55aa37767441969541c71ef8b5bdef8f96b6d Mon Sep 17 00:00:00 2001 From: joyewon0705 <77885098+joyewon0705@users.noreply.github.com> Date: Sat, 4 Oct 2025 14:25:14 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Ref:=20PostRespositoryImpl=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/board/dto/CategoryResponse.java | 4 + .../domain/board/dto/PostListResponse.java | 30 --- .../board/repository/PostRepositoryImpl.java | 176 +++++++++++------- 3 files changed, 112 insertions(+), 98 deletions(-) diff --git a/src/main/java/com/back/domain/board/dto/CategoryResponse.java b/src/main/java/com/back/domain/board/dto/CategoryResponse.java index 50b3fe4f..87afe23c 100644 --- a/src/main/java/com/back/domain/board/dto/CategoryResponse.java +++ b/src/main/java/com/back/domain/board/dto/CategoryResponse.java @@ -1,6 +1,7 @@ package com.back.domain.board.dto; import com.back.domain.board.entity.PostCategory; +import com.querydsl.core.annotations.QueryProjection; /** * 카테고리 응답 DTO @@ -12,6 +13,9 @@ public record CategoryResponse( Long id, String name ) { + @QueryProjection + public CategoryResponse {} + public static CategoryResponse from(PostCategory category) { return new CategoryResponse( category.getId(), diff --git a/src/main/java/com/back/domain/board/dto/PostListResponse.java b/src/main/java/com/back/domain/board/dto/PostListResponse.java index 2976b9c6..ce80f6a7 100644 --- a/src/main/java/com/back/domain/board/dto/PostListResponse.java +++ b/src/main/java/com/back/domain/board/dto/PostListResponse.java @@ -44,34 +44,4 @@ public PostListResponse(Long postId, this.createdAt = createdAt; this.updatedAt = updatedAt; } - - /** - * 작성자 응답 DTO - */ - @Getter - public static class AuthorResponse { - private final Long id; - private final String nickname; - - @QueryProjection - public AuthorResponse(Long userId, String nickname) { - this.id = userId; - this.nickname = nickname; - } - } - - /** - * 카테고리 응답 DTO - */ - @Getter - public static class CategoryResponse { - private final Long id; - private final String name; - - @QueryProjection - public CategoryResponse(Long id, String name) { - this.id = id; - this.name = name; - } - } } \ No newline at end of file diff --git a/src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java b/src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java index 7e6d09f3..cdd265f6 100644 --- a/src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java @@ -1,24 +1,21 @@ package com.back.domain.board.repository; -import com.back.domain.board.dto.PostListResponse; -import com.back.domain.board.dto.QPostListResponse; -import com.back.domain.board.dto.QPostListResponse_AuthorResponse; -import com.back.domain.board.dto.QPostListResponse_CategoryResponse; +import com.back.domain.board.dto.*; import com.back.domain.board.entity.*; import com.back.domain.user.entity.QUser; +import com.back.domain.user.entity.QUserProfile; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.Tuple; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.Order; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.PathBuilder; +import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; +import org.springframework.data.domain.*; import java.util.*; import java.util.stream.Collectors; @@ -29,6 +26,7 @@ public class PostRepositoryImpl implements PostRepositoryCustom { /** * 게시글 다건 검색 + * - 총 쿼리 수 : 3회 (Post + Category + count) * * @param keyword 검색 키워드 * @param searchType 검색 타입(title/content/author/전체) @@ -37,37 +35,41 @@ public class PostRepositoryImpl implements PostRepositoryCustom { */ @Override public Page searchPosts(String keyword, String searchType, Long categoryId, Pageable pageable) { - // 검색 조건 생성 + // 1. 검색 조건 생성 BooleanBuilder where = buildWhere(keyword, searchType, categoryId); - // 정렬 조건 생성 + // 2. 정렬 조건 생성 (엔티티 필드 기반) List> orders = buildOrderSpecifiers(pageable); - // 메인 게시글 쿼리 실행 + // 3. 게시글 메인 조회 List results = fetchPosts(where, orders, pageable); - // 카테고리 조회 후 DTO에 주입 + // 4. 카테고리 조회 후 결과 DTO에 매핑 injectCategories(results); - // 전체 카운트 조회 + // 5. 정렬 후처리 (통계 필드 기반) + results = sortInMemoryIfNeeded(results, pageable); + + // 6. 전체 게시글 개수 카운트 쿼리 long total = countPosts(where, categoryId); - // 결과를 Page로 감싸서 반환 + // 7. Page 객체로 반환 return new PageImpl<>(results, pageable, total); } + // -------------------- 내부 메서드 -------------------- + /** * 검색 조건 생성 - * - keyword + searchType(title/content/author)에 따라 동적 조건 추가 - * - categoryId가 주어지면 카테고리 필터 조건 추가 + * - title/content/author 기반 동적 필터 + * - categoryId가 존재하면 categoryMapping join 기반 추가 조건 */ private BooleanBuilder buildWhere(String keyword, String searchType, Long categoryId) { QPost post = QPost.post; QPostCategoryMapping categoryMapping = QPostCategoryMapping.postCategoryMapping; - BooleanBuilder where = new BooleanBuilder(); - // 검색 조건 추가 + // 키워드 필터링 if (keyword != null && !keyword.isBlank()) { switch (searchType) { case "title" -> where.and(post.title.containsIgnoreCase(keyword)); @@ -90,80 +92,92 @@ private BooleanBuilder buildWhere(String keyword, String searchType, Long catego } /** - * 정렬 처리 빌더 - * - Pageable의 Sort 정보 기반으로 OrderSpecifier 생성 - * - likeCount/bookmarkCount/commentCount -> countDistinct() 기준 정렬 - * - 그 외 속성 -> Post 엔티티 필드 기준 정렬 + * 정렬 처리 (DB 정렬) + * - title, createdAt, updatedAt 등 엔티티 필드 */ private List> buildOrderSpecifiers(Pageable pageable) { QPost post = QPost.post; - QPostLike postLike = QPostLike.postLike; - QPostBookmark postBookmark = QPostBookmark.postBookmark; - QComment comment = QComment.comment; - List> orders = new ArrayList<>(); - PathBuilder entityPath = new PathBuilder<>(Post.class, post.getMetadata()); + var entityPath = new com.querydsl.core.types.dsl.PathBuilder<>(Post.class, post.getMetadata()); - // 정렬 조건 추가 for (Sort.Order order : pageable.getSort()) { - Order direction = order.isAscending() ? Order.ASC : Order.DESC; String prop = order.getProperty(); - switch (prop) { - case "likeCount" -> orders.add(new OrderSpecifier<>(direction, postLike.id.countDistinct())); - case "bookmarkCount" -> orders.add(new OrderSpecifier<>(direction, postBookmark.id.countDistinct())); - case "commentCount" -> orders.add(new OrderSpecifier<>(direction, comment.id.countDistinct())); - default -> - orders.add(new OrderSpecifier<>(direction, entityPath.getComparable(prop, Comparable.class))); + + // 통계 필드는 메모리 정렬에서 처리 + if (prop.equals("likeCount") || prop.equals("bookmarkCount") || prop.equals("commentCount")) { + continue; } - } + Order direction = order.isAscending() ? Order.ASC : Order.DESC; + orders.add(new OrderSpecifier<>(direction, entityPath.getComparable(prop, Comparable.class))); + } return orders; } /** - * 게시글 조회 (메인 쿼리) - * - Post + User join - * - 좋아요, 북마크, 댓글 countDistinct() 집계 - * - groupBy(post.id, user.id, userProfie.nickname) - * - Pageable offset/limit 적용 + * 게시글 조회 + * - Post + User + UserProfile join (N+1 방지) + * - like/bookmark/comment count는 각각 서브쿼리로 계산 + * → 한 번의 SQL 안에서 처리 (쿼리 1회) */ private List fetchPosts(BooleanBuilder where, List> orders, Pageable pageable) { QPost post = QPost.post; QUser user = QUser.user; - QPostLike postLike = QPostLike.postLike; - QPostBookmark postBookmark = QPostBookmark.postBookmark; + QUserProfile profile = QUserProfile.userProfile; + QPostLike like = QPostLike.postLike; + QPostBookmark bookmark = QPostBookmark.postBookmark; QComment comment = QComment.comment; + // 서브쿼리로 통계 계산 + Expression likeCount = ExpressionUtils.as( + JPAExpressions.select(like.count()) + .from(like) + .where(like.post.eq(post)), + "likeCount" + ); + + Expression bookmarkCount = ExpressionUtils.as( + JPAExpressions.select(bookmark.count()) + .from(bookmark) + .where(bookmark.post.eq(post)), + "bookmarkCount" + ); + + Expression commentCount = ExpressionUtils.as( + JPAExpressions.select(comment.count()) + .from(comment) + .where(comment.post.eq(post)), + "commentCount" + ); + + // 메인 쿼리 return queryFactory .select(new QPostListResponse( post.id, - new QPostListResponse_AuthorResponse(user.id, user.userProfile.nickname), + new QAuthorResponse(user.id, profile.nickname), // 작성자 정보 (N+1 방지 join) post.title, - Expressions.constant(Collections.emptyList()), // 카테고리는 나중에 주입 - postLike.id.countDistinct(), - postBookmark.id.countDistinct(), - comment.id.countDistinct(), + Expressions.constant(Collections.emptyList()), // categories는 별도 주입 + likeCount, + bookmarkCount, + commentCount, post.createdAt, post.updatedAt )) .from(post) .leftJoin(post.user, user) - .leftJoin(post.postLikes, postLike) - .leftJoin(post.postBookmarks, postBookmark) - .leftJoin(post.comments, comment) + .leftJoin(user.userProfile, profile) // UserProfile join으로 N+1 방지 .where(where) - .groupBy(post.id, user.id, user.userProfile.nickname) .orderBy(orders.toArray(new OrderSpecifier[0])) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) - .fetch(); + .fetch(); // 쿼리 1회 (서브쿼리 포함) } /** - * 카테고리 일괄 조회 & 매핑 - * - postId 목록을 모아 IN 쿼리 실행 - * - 결과를 Map>로 변환 - * - 각 PostListResponse DTO에 categories 주입 + * 카테고리 일괄 조회 + * - Post ID 목록 기반으로 categoryMapping 테이블 IN 쿼리 1회 실행 + * - Map>로 매핑 후 DTO에 주입 + * - N+1 방지 (게시글별 조회 X) */ private void injectCategories(List results) { if (results.isEmpty()) return; @@ -179,27 +193,54 @@ private void injectCategories(List results) { List categoryTuples = queryFactory .select( categoryMapping.post.id, - new QPostListResponse_CategoryResponse(categoryMapping.category.id, categoryMapping.category.name) + new QCategoryResponse(categoryMapping.category.id, categoryMapping.category.name) ) .from(categoryMapping) .where(categoryMapping.post.id.in(postIds)) .fetch(); - // Map>로 변환 - Map> categoryMap = categoryTuples.stream() + // 매핑 편의를 위해 변환 + Map> categoryMap = categoryTuples.stream() .collect(Collectors.groupingBy( tuple -> Objects.requireNonNull(tuple.get(categoryMapping.post.id)), - Collectors.mapping(t -> t.get(1, PostListResponse.CategoryResponse.class), Collectors.toList()) + Collectors.mapping(t -> t.get(1, CategoryResponse.class), Collectors.toList()) )); // categories 주입 - results.forEach(r -> r.setCategories(categoryMap.getOrDefault(r.getPostId(), List.of()))); + results.forEach(r -> + r.setCategories(categoryMap.getOrDefault(r.getPostId(), List.of())) + ); + } + + /** + * 통계 기반 정렬 처리 (메모리) + * - likeCount / bookmarkCount / commentCount 등 통계 필드 + * - DB에서는 서브쿼리 필드 정렬 불가 → Java 단에서 정렬 + * - 데이터량이 페이지 단위(20~50건)라면 CPU 부하는 무시 가능 + */ + private List sortInMemoryIfNeeded(List results, Pageable pageable) { + if (results.isEmpty() || !pageable.getSort().isSorted()) return results; + + for (Sort.Order order : pageable.getSort()) { + Comparator comparator = null; + switch (order.getProperty()) { + case "likeCount" -> comparator = Comparator.comparing(PostListResponse::getLikeCount); + case "bookmarkCount" -> comparator = Comparator.comparing(PostListResponse::getBookmarkCount); + case "commentCount" -> comparator = Comparator.comparing(PostListResponse::getCommentCount); + } + if (comparator != null) { + if (order.isDescending()) comparator = comparator.reversed(); + results.sort(comparator); + } + } + return results; } /** - * 전체 게시글 개수 조회 - * - 조건에 맞는 게시글 총 개수를 가져옴 - * - categoryId 필터가 있으면 postCategoryMapping join 포함 + * 전체 게시글 개수 카운트 + * - 페이지네이션 total 계산용 + * - categoryId가 있으면 mapping join 포함 + * - 단순 count 쿼리 1회 실행 */ private long countPosts(BooleanBuilder where, Long categoryId) { QPost post = QPost.post; @@ -216,7 +257,6 @@ private long countPosts(BooleanBuilder where, Long categoryId) { } Long total = countQuery.where(where).fetchOne(); - return total != null ? total : 0L; } -} +} \ No newline at end of file From 471e2a0e09b7c4fd72e79b7bfe9f59b35108d2cb Mon Sep 17 00:00:00 2001 From: joyewon0705 <77885098+joyewon0705@users.noreply.github.com> Date: Sat, 4 Oct 2025 15:08:56 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Ref:=20CommentRepositoryImpl=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/CommentRepositoryImpl.java | 154 ++++++++++++------ 1 file changed, 108 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java b/src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java index ec7f5f47..d39f4459 100644 --- a/src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java @@ -1,13 +1,12 @@ package com.back.domain.board.repository; -import com.back.domain.board.dto.CommentListResponse; -import com.back.domain.board.dto.QAuthorResponse; -import com.back.domain.board.dto.QCommentListResponse; +import com.back.domain.board.dto.*; import com.back.domain.board.entity.Comment; import com.back.domain.board.entity.QComment; import com.back.domain.board.entity.QCommentLike; import com.back.domain.user.entity.QUser; import com.back.domain.user.entity.QUserProfile; +import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Order; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.BooleanExpression; @@ -15,27 +14,34 @@ import com.querydsl.core.types.dsl.PathBuilder; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; - +import org.springframework.data.domain.*; import java.util.*; import java.util.stream.Collectors; @RequiredArgsConstructor public class CommentRepositoryImpl implements CommentRepositoryCustom { + private final JPAQueryFactory queryFactory; + /** + * 게시글 ID로 댓글 목록 조회 + * - 부모 댓글 페이징 + 자식 댓글 전체 조회 + * - likeCount는 부모/자식 댓글을 한 번에 조회 후 주입 + * - likeCount 정렬은 메모리에서 처리 + * - 총 쿼리 수: 4회 (부모조회 + 자식조회 + likeCount + count) + * + * @param postId 게시글 Id + * @param pageable 페이징 + 정렬 조건 + */ @Override public Page getCommentsByPostId(Long postId, Pageable pageable) { QComment comment = QComment.comment; QCommentLike commentLike = QCommentLike.commentLike; - // 정렬 조건 - List> orders = buildOrderSpecifiers(pageable, comment, commentLike); + // 1. 정렬 조건 생성 (엔티티 필드 기반) + List> orders = buildOrderSpecifiers(pageable, comment); - // 부모 댓글 조회 + // 2. 부모 댓글 조회 (페이징) List parents = fetchComments( comment.post.id.eq(postId).and(comment.parent.isNull()), orders, @@ -47,12 +53,12 @@ public Page getCommentsByPostId(Long postId, Pageable pagea return new PageImpl<>(parents, pageable, 0); } - // 부모 id 수집 + // 3. 부모 ID 목록 수집 List parentIds = parents.stream() .map(CommentListResponse::getCommentId) .toList(); - // 자식 댓글 조회 + // 4. 자식 댓글 조회 (부모 ID 기준) List children = fetchComments( comment.parent.id.in(parentIds), List.of(comment.createdAt.asc()), @@ -60,35 +66,20 @@ public Page getCommentsByPostId(Long postId, Pageable pagea null ); - // 부모 + 자식 id 합쳐서 likeCount 한 번에 조회 - List allIds = new ArrayList<>(parentIds); - allIds.addAll(children.stream().map(CommentListResponse::getCommentId).toList()); - - Map likeCountMap = queryFactory - .select(commentLike.comment.id, commentLike.count()) - .from(commentLike) - .where(commentLike.comment.id.in(allIds)) - .groupBy(commentLike.comment.id) - .fetch() - .stream() - .collect(Collectors.toMap( - tuple -> tuple.get(commentLike.comment.id), - tuple -> tuple.get(commentLike.count()) - )); + // 5. 부모 + 자식 댓글 ID 합쳐 likeCount 조회 (쿼리 1회) + Map likeCountMap = fetchLikeCounts(parentIds, children); - // likeCount 세팅 + // 6. likeCount 주입 parents.forEach(p -> p.setLikeCount(likeCountMap.getOrDefault(p.getCommentId(), 0L))); children.forEach(c -> c.setLikeCount(likeCountMap.getOrDefault(c.getCommentId(), 0L))); - // parentId → children 매핑 - Map> childMap = children.stream() - .collect(Collectors.groupingBy(CommentListResponse::getParentId)); + // 7. 부모-자식 매핑 + mapChildrenToParents(parents, children); - parents.forEach(p -> - p.setChildren(childMap.getOrDefault(p.getCommentId(), List.of())) - ); + // 8. 정렬 후처리 (통계 필드 기반) + parents = sortInMemoryIfNeeded(parents, pageable); - // 총 개수 (부모 댓글만 카운트) + // 9. 전체 부모 댓글 수 조회 Long total = queryFactory .select(comment.count()) .from(comment) @@ -98,8 +89,12 @@ public Page getCommentsByPostId(Long postId, Pageable pagea return new PageImpl<>(parents, pageable, total != null ? total : 0L); } + // -------------------- 내부 메서드 -------------------- + /** - * 공통 댓글 조회 메서드 (부모/자식 공통) + * 댓글 조회 + * - User / UserProfile join (N+1 방지) + * - likeCount는 이후 주입 */ private List fetchComments( BooleanExpression condition, @@ -118,10 +113,10 @@ private List fetchComments( comment.parent.id, new QAuthorResponse(user.id, profile.nickname), comment.content, - Expressions.constant(0L), // likeCount placeholder + Expressions.constant(0L), // likeCount는 별도 주입 comment.createdAt, comment.updatedAt, - Expressions.constant(Collections.emptyList()) + Expressions.constant(Collections.emptyList()) // children은 별도 주입 )) .from(comment) .leftJoin(comment.user, user) @@ -137,22 +132,89 @@ private List fetchComments( } /** - * 정렬 조건 처리 + * likeCount 일괄 조회 + * - IN 조건 기반 groupBy 쿼리 1회 + * - 부모/자식 댓글을 한 번에 조회 */ - private List> buildOrderSpecifiers(Pageable pageable, QComment comment, QCommentLike commentLike) { + private Map fetchLikeCounts(List parentIds, List children) { + QCommentLike commentLike = QCommentLike.commentLike; + + List allIds = new ArrayList<>(parentIds); + allIds.addAll(children.stream().map(CommentListResponse::getCommentId).toList()); + + if (allIds.isEmpty()) return Map.of(); + + return queryFactory + .select(commentLike.comment.id, commentLike.count()) + .from(commentLike) + .where(commentLike.comment.id.in(allIds)) + .groupBy(commentLike.comment.id) + .fetch() + .stream() + .collect(Collectors.toMap( + tuple -> tuple.get(commentLike.comment.id), + tuple -> tuple.get(commentLike.count()) + )); + } + + /** + * 부모/자식 관계 매핑 + * - childMap을 parentId 기준으로 그룹화 후 children 필드에 set + */ + private void mapChildrenToParents(List parents, List children) { + if (children.isEmpty()) return; + + Map> childMap = children.stream() + .collect(Collectors.groupingBy(CommentListResponse::getParentId)); + + parents.forEach(parent -> + parent.setChildren(childMap.getOrDefault(parent.getCommentId(), List.of())) + ); + } + + /** + * 정렬 처리 (DB 정렬) + * - createdAt, updatedAt 등 엔티티 필드 + */ + private List> buildOrderSpecifiers(Pageable pageable, QComment comment) { PathBuilder entityPath = new PathBuilder<>(Comment.class, comment.getMetadata()); List> orders = new ArrayList<>(); for (Sort.Order order : pageable.getSort()) { - Order direction = order.isAscending() ? Order.ASC : Order.DESC; String prop = order.getProperty(); - switch (prop) { - case "likeCount" -> orders.add(new OrderSpecifier<>(direction, commentLike.id.countDistinct())); - default -> orders.add(new OrderSpecifier<>(direction, - entityPath.getComparable(prop, Comparable.class))); + // 통계 필드는 메모리 정렬에서 처리 + if (prop.equals("likeCount")) { + continue; } + Order direction = order.isAscending() ? Order.ASC : Order.DESC; + orders.add(new OrderSpecifier<>(direction, entityPath.getComparable(prop, Comparable.class))); } + return orders; } + + /** + * 통계 기반 정렬 처리 (메모리) + * - likeCount 등 통계 필드 + * - 페이지 단위라 성능에 영향 없음 + */ + private List sortInMemoryIfNeeded(List results, Pageable pageable) { + if (results.isEmpty() || !pageable.getSort().isSorted()) return results; + + for (Sort.Order order : pageable.getSort()) { + Comparator comparator = null; + + if ("likeCount".equals(order.getProperty())) { + comparator = Comparator.comparing(CommentListResponse::getLikeCount); + } + + if (comparator != null) { + if (order.isDescending()) comparator = comparator.reversed(); + results.sort(comparator); + } + } + + return results; + } } From 03626bd8a2aa245a98084d4b1b0872a6c6eea4b4 Mon Sep 17 00:00:00 2001 From: joyewon0705 <77885098+joyewon0705@users.noreply.github.com> Date: Sat, 4 Oct 2025 15:27:56 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Ref:=20board=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommentController.java | 12 +++++------ .../controller/CommentControllerDocs.java | 10 +++++----- .../dto/CommentListResponse.java | 3 ++- .../{ => comment}/dto/CommentRequest.java | 2 +- .../{ => comment}/dto/CommentResponse.java | 5 +++-- .../board/{ => comment}/entity/Comment.java | 3 ++- .../{ => comment}/entity/CommentLike.java | 2 +- .../repository/CommentRepository.java | 4 ++-- .../repository/CommentRepositoryCustom.java | 4 ++-- .../repository/CommentRepositoryImpl.java | 15 +++++++------- .../{ => comment}/service/CommentService.java | 20 +++++++++---------- .../{ => common}/dto/AuthorResponse.java | 2 +- .../board/{ => common}/dto/PageResponse.java | 2 +- .../{ => post}/controller/PostController.java | 10 +++++++--- .../controller/PostControllerDocs.java | 8 ++++++-- .../{ => post}/dto/CategoryResponse.java | 4 ++-- .../{ => post}/dto/PostDetailResponse.java | 5 +++-- .../{ => post}/dto/PostListResponse.java | 3 ++- .../board/{ => post}/dto/PostRequest.java | 2 +- .../board/{ => post}/dto/PostResponse.java | 5 +++-- .../domain/board/{ => post}/entity/Post.java | 3 ++- .../board/{ => post}/entity/PostBookmark.java | 2 +- .../board/{ => post}/entity/PostCategory.java | 2 +- .../entity/PostCategoryMapping.java | 2 +- .../board/{ => post}/entity/PostLike.java | 2 +- .../repository/PostCategoryRepository.java | 4 ++-- .../{ => post}/repository/PostRepository.java | 4 ++-- .../repository/PostRepositoryCustom.java | 4 ++-- .../repository/PostRepositoryImpl.java | 13 ++++++++---- .../board/{ => post}/service/PostService.java | 18 ++++++++++------- .../com/back/domain/user/entity/User.java | 6 +++++- .../controller/CommentControllerTest.java | 10 +++++----- .../board/controller/PostControllerTest.java | 10 +++++----- .../board/service/CommentServiceTest.java | 17 ++++++++-------- .../domain/board/service/PostServiceTest.java | 15 +++++++++----- 35 files changed, 134 insertions(+), 99 deletions(-) rename src/main/java/com/back/domain/board/{ => comment}/controller/CommentController.java (90%) rename src/main/java/com/back/domain/board/{ => comment}/controller/CommentControllerDocs.java (98%) rename src/main/java/com/back/domain/board/{ => comment}/dto/CommentListResponse.java (93%) rename src/main/java/com/back/domain/board/{ => comment}/dto/CommentRequest.java (83%) rename src/main/java/com/back/domain/board/{ => comment}/dto/CommentResponse.java (84%) rename src/main/java/com/back/domain/board/{ => comment}/entity/Comment.java (94%) rename src/main/java/com/back/domain/board/{ => comment}/entity/CommentLike.java (92%) rename src/main/java/com/back/domain/board/{ => comment}/repository/CommentRepository.java (68%) rename src/main/java/com/back/domain/board/{ => comment}/repository/CommentRepositoryCustom.java (66%) rename src/main/java/com/back/domain/board/{ => comment}/repository/CommentRepositoryImpl.java (95%) rename src/main/java/com/back/domain/board/{ => comment}/service/CommentService.java (88%) rename src/main/java/com/back/domain/board/{ => common}/dto/AuthorResponse.java (92%) rename src/main/java/com/back/domain/board/{ => common}/dto/PageResponse.java (95%) rename src/main/java/com/back/domain/board/{ => post}/controller/PostController.java (90%) rename src/main/java/com/back/domain/board/{ => post}/controller/PostControllerDocs.java (98%) rename src/main/java/com/back/domain/board/{ => post}/dto/CategoryResponse.java (83%) rename src/main/java/com/back/domain/board/{ => post}/dto/PostDetailResponse.java (91%) rename src/main/java/com/back/domain/board/{ => post}/dto/PostListResponse.java (93%) rename src/main/java/com/back/domain/board/{ => post}/dto/PostRequest.java (90%) rename src/main/java/com/back/domain/board/{ => post}/dto/PostResponse.java (88%) rename src/main/java/com/back/domain/board/{ => post}/entity/Post.java (95%) rename src/main/java/com/back/domain/board/{ => post}/entity/PostBookmark.java (92%) rename src/main/java/com/back/domain/board/{ => post}/entity/PostCategory.java (94%) rename src/main/java/com/back/domain/board/{ => post}/entity/PostCategoryMapping.java (93%) rename src/main/java/com/back/domain/board/{ => post}/entity/PostLike.java (92%) rename src/main/java/com/back/domain/board/{ => post}/repository/PostCategoryRepository.java (67%) rename src/main/java/com/back/domain/board/{ => post}/repository/PostRepository.java (69%) rename src/main/java/com/back/domain/board/{ => post}/repository/PostRepositoryCustom.java (70%) rename src/main/java/com/back/domain/board/{ => post}/repository/PostRepositoryImpl.java (96%) rename src/main/java/com/back/domain/board/{ => post}/service/PostService.java (88%) diff --git a/src/main/java/com/back/domain/board/controller/CommentController.java b/src/main/java/com/back/domain/board/comment/controller/CommentController.java similarity index 90% rename from src/main/java/com/back/domain/board/controller/CommentController.java rename to src/main/java/com/back/domain/board/comment/controller/CommentController.java index a643e294..44a1811d 100644 --- a/src/main/java/com/back/domain/board/controller/CommentController.java +++ b/src/main/java/com/back/domain/board/comment/controller/CommentController.java @@ -1,10 +1,10 @@ -package com.back.domain.board.controller; +package com.back.domain.board.comment.controller; -import com.back.domain.board.dto.CommentListResponse; -import com.back.domain.board.dto.CommentRequest; -import com.back.domain.board.dto.CommentResponse; -import com.back.domain.board.dto.PageResponse; -import com.back.domain.board.service.CommentService; +import com.back.domain.board.comment.dto.CommentListResponse; +import com.back.domain.board.comment.dto.CommentRequest; +import com.back.domain.board.comment.dto.CommentResponse; +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.comment.service.CommentService; import com.back.global.common.dto.RsData; import com.back.global.security.user.CustomUserDetails; import jakarta.validation.Valid; diff --git a/src/main/java/com/back/domain/board/controller/CommentControllerDocs.java b/src/main/java/com/back/domain/board/comment/controller/CommentControllerDocs.java similarity index 98% rename from src/main/java/com/back/domain/board/controller/CommentControllerDocs.java rename to src/main/java/com/back/domain/board/comment/controller/CommentControllerDocs.java index 0b1af463..3adb752d 100644 --- a/src/main/java/com/back/domain/board/controller/CommentControllerDocs.java +++ b/src/main/java/com/back/domain/board/comment/controller/CommentControllerDocs.java @@ -1,9 +1,9 @@ -package com.back.domain.board.controller; +package com.back.domain.board.comment.controller; -import com.back.domain.board.dto.CommentListResponse; -import com.back.domain.board.dto.CommentRequest; -import com.back.domain.board.dto.CommentResponse; -import com.back.domain.board.dto.PageResponse; +import com.back.domain.board.comment.dto.CommentListResponse; +import com.back.domain.board.comment.dto.CommentRequest; +import com.back.domain.board.comment.dto.CommentResponse; +import com.back.domain.board.common.dto.PageResponse; import com.back.global.common.dto.RsData; import com.back.global.security.user.CustomUserDetails; import io.swagger.v3.oas.annotations.Operation; diff --git a/src/main/java/com/back/domain/board/dto/CommentListResponse.java b/src/main/java/com/back/domain/board/comment/dto/CommentListResponse.java similarity index 93% rename from src/main/java/com/back/domain/board/dto/CommentListResponse.java rename to src/main/java/com/back/domain/board/comment/dto/CommentListResponse.java index 4ee2982c..90f60554 100644 --- a/src/main/java/com/back/domain/board/dto/CommentListResponse.java +++ b/src/main/java/com/back/domain/board/comment/dto/CommentListResponse.java @@ -1,5 +1,6 @@ -package com.back.domain.board.dto; +package com.back.domain.board.comment.dto; +import com.back.domain.board.common.dto.AuthorResponse; import com.querydsl.core.annotations.QueryProjection; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/back/domain/board/dto/CommentRequest.java b/src/main/java/com/back/domain/board/comment/dto/CommentRequest.java similarity index 83% rename from src/main/java/com/back/domain/board/dto/CommentRequest.java rename to src/main/java/com/back/domain/board/comment/dto/CommentRequest.java index 24a1a2eb..25f500b1 100644 --- a/src/main/java/com/back/domain/board/dto/CommentRequest.java +++ b/src/main/java/com/back/domain/board/comment/dto/CommentRequest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.dto; +package com.back.domain.board.comment.dto; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/back/domain/board/dto/CommentResponse.java b/src/main/java/com/back/domain/board/comment/dto/CommentResponse.java similarity index 84% rename from src/main/java/com/back/domain/board/dto/CommentResponse.java rename to src/main/java/com/back/domain/board/comment/dto/CommentResponse.java index 6b76feba..96da8d82 100644 --- a/src/main/java/com/back/domain/board/dto/CommentResponse.java +++ b/src/main/java/com/back/domain/board/comment/dto/CommentResponse.java @@ -1,6 +1,7 @@ -package com.back.domain.board.dto; +package com.back.domain.board.comment.dto; -import com.back.domain.board.entity.Comment; +import com.back.domain.board.common.dto.AuthorResponse; +import com.back.domain.board.comment.entity.Comment; import java.time.LocalDateTime; diff --git a/src/main/java/com/back/domain/board/entity/Comment.java b/src/main/java/com/back/domain/board/comment/entity/Comment.java similarity index 94% rename from src/main/java/com/back/domain/board/entity/Comment.java rename to src/main/java/com/back/domain/board/comment/entity/Comment.java index d1e81993..e91ab6c3 100644 --- a/src/main/java/com/back/domain/board/entity/Comment.java +++ b/src/main/java/com/back/domain/board/comment/entity/Comment.java @@ -1,5 +1,6 @@ -package com.back.domain.board.entity; +package com.back.domain.board.comment.entity; +import com.back.domain.board.post.entity.Post; import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; import jakarta.persistence.*; diff --git a/src/main/java/com/back/domain/board/entity/CommentLike.java b/src/main/java/com/back/domain/board/comment/entity/CommentLike.java similarity index 92% rename from src/main/java/com/back/domain/board/entity/CommentLike.java rename to src/main/java/com/back/domain/board/comment/entity/CommentLike.java index 18d60564..6196ddf4 100644 --- a/src/main/java/com/back/domain/board/entity/CommentLike.java +++ b/src/main/java/com/back/domain/board/comment/entity/CommentLike.java @@ -1,4 +1,4 @@ -package com.back.domain.board.entity; +package com.back.domain.board.comment.entity; import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; diff --git a/src/main/java/com/back/domain/board/repository/CommentRepository.java b/src/main/java/com/back/domain/board/comment/repository/CommentRepository.java similarity index 68% rename from src/main/java/com/back/domain/board/repository/CommentRepository.java rename to src/main/java/com/back/domain/board/comment/repository/CommentRepository.java index 25457552..79fd7f5c 100644 --- a/src/main/java/com/back/domain/board/repository/CommentRepository.java +++ b/src/main/java/com/back/domain/board/comment/repository/CommentRepository.java @@ -1,6 +1,6 @@ -package com.back.domain.board.repository; +package com.back.domain.board.comment.repository; -import com.back.domain.board.entity.Comment; +import com.back.domain.board.comment.entity.Comment; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/back/domain/board/repository/CommentRepositoryCustom.java b/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryCustom.java similarity index 66% rename from src/main/java/com/back/domain/board/repository/CommentRepositoryCustom.java rename to src/main/java/com/back/domain/board/comment/repository/CommentRepositoryCustom.java index 2ab1193e..62df0844 100644 --- a/src/main/java/com/back/domain/board/repository/CommentRepositoryCustom.java +++ b/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryCustom.java @@ -1,6 +1,6 @@ -package com.back.domain.board.repository; +package com.back.domain.board.comment.repository; -import com.back.domain.board.dto.CommentListResponse; +import com.back.domain.board.comment.dto.CommentListResponse; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java b/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryImpl.java similarity index 95% rename from src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java rename to src/main/java/com/back/domain/board/comment/repository/CommentRepositoryImpl.java index d39f4459..e0c4d9fc 100644 --- a/src/main/java/com/back/domain/board/repository/CommentRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/comment/repository/CommentRepositoryImpl.java @@ -1,12 +1,13 @@ -package com.back.domain.board.repository; - -import com.back.domain.board.dto.*; -import com.back.domain.board.entity.Comment; -import com.back.domain.board.entity.QComment; -import com.back.domain.board.entity.QCommentLike; +package com.back.domain.board.comment.repository; + +import com.back.domain.board.comment.dto.CommentListResponse; +import com.back.domain.board.comment.dto.QCommentListResponse; +import com.back.domain.board.comment.entity.Comment; +import com.back.domain.board.comment.entity.QComment; +import com.back.domain.board.comment.entity.QCommentLike; +import com.back.domain.board.common.dto.QAuthorResponse; import com.back.domain.user.entity.QUser; import com.back.domain.user.entity.QUserProfile; -import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Order; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.BooleanExpression; diff --git a/src/main/java/com/back/domain/board/service/CommentService.java b/src/main/java/com/back/domain/board/comment/service/CommentService.java similarity index 88% rename from src/main/java/com/back/domain/board/service/CommentService.java rename to src/main/java/com/back/domain/board/comment/service/CommentService.java index e6010a4c..129862ab 100644 --- a/src/main/java/com/back/domain/board/service/CommentService.java +++ b/src/main/java/com/back/domain/board/comment/service/CommentService.java @@ -1,13 +1,13 @@ -package com.back.domain.board.service; - -import com.back.domain.board.dto.CommentListResponse; -import com.back.domain.board.dto.CommentRequest; -import com.back.domain.board.dto.CommentResponse; -import com.back.domain.board.dto.PageResponse; -import com.back.domain.board.entity.Comment; -import com.back.domain.board.entity.Post; -import com.back.domain.board.repository.CommentRepository; -import com.back.domain.board.repository.PostRepository; +package com.back.domain.board.comment.service; + +import com.back.domain.board.comment.dto.CommentListResponse; +import com.back.domain.board.comment.dto.CommentRequest; +import com.back.domain.board.comment.dto.CommentResponse; +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.comment.entity.Comment; +import com.back.domain.board.post.entity.Post; +import com.back.domain.board.comment.repository.CommentRepository; +import com.back.domain.board.post.repository.PostRepository; import com.back.domain.user.entity.User; import com.back.domain.user.repository.UserRepository; import com.back.global.exception.CustomException; diff --git a/src/main/java/com/back/domain/board/dto/AuthorResponse.java b/src/main/java/com/back/domain/board/common/dto/AuthorResponse.java similarity index 92% rename from src/main/java/com/back/domain/board/dto/AuthorResponse.java rename to src/main/java/com/back/domain/board/common/dto/AuthorResponse.java index 9019a0f1..664d8fea 100644 --- a/src/main/java/com/back/domain/board/dto/AuthorResponse.java +++ b/src/main/java/com/back/domain/board/common/dto/AuthorResponse.java @@ -1,4 +1,4 @@ -package com.back.domain.board.dto; +package com.back.domain.board.common.dto; import com.back.domain.user.entity.User; import com.querydsl.core.annotations.QueryProjection; diff --git a/src/main/java/com/back/domain/board/dto/PageResponse.java b/src/main/java/com/back/domain/board/common/dto/PageResponse.java similarity index 95% rename from src/main/java/com/back/domain/board/dto/PageResponse.java rename to src/main/java/com/back/domain/board/common/dto/PageResponse.java index ef317fb0..d5e951f4 100644 --- a/src/main/java/com/back/domain/board/dto/PageResponse.java +++ b/src/main/java/com/back/domain/board/common/dto/PageResponse.java @@ -1,4 +1,4 @@ -package com.back.domain.board.dto; +package com.back.domain.board.common.dto; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/back/domain/board/controller/PostController.java b/src/main/java/com/back/domain/board/post/controller/PostController.java similarity index 90% rename from src/main/java/com/back/domain/board/controller/PostController.java rename to src/main/java/com/back/domain/board/post/controller/PostController.java index fa4c71cf..bf0ffa5e 100644 --- a/src/main/java/com/back/domain/board/controller/PostController.java +++ b/src/main/java/com/back/domain/board/post/controller/PostController.java @@ -1,7 +1,11 @@ -package com.back.domain.board.controller; +package com.back.domain.board.post.controller; -import com.back.domain.board.dto.*; -import com.back.domain.board.service.PostService; +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.post.dto.PostDetailResponse; +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.service.PostService; import com.back.global.common.dto.RsData; import com.back.global.security.user.CustomUserDetails; import jakarta.validation.Valid; diff --git a/src/main/java/com/back/domain/board/controller/PostControllerDocs.java b/src/main/java/com/back/domain/board/post/controller/PostControllerDocs.java similarity index 98% rename from src/main/java/com/back/domain/board/controller/PostControllerDocs.java rename to src/main/java/com/back/domain/board/post/controller/PostControllerDocs.java index 16dcd241..c3bc9a43 100644 --- a/src/main/java/com/back/domain/board/controller/PostControllerDocs.java +++ b/src/main/java/com/back/domain/board/post/controller/PostControllerDocs.java @@ -1,6 +1,10 @@ -package com.back.domain.board.controller; +package com.back.domain.board.post.controller; -import com.back.domain.board.dto.*; +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.post.dto.PostDetailResponse; +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.global.common.dto.RsData; import com.back.global.security.user.CustomUserDetails; import io.swagger.v3.oas.annotations.Operation; diff --git a/src/main/java/com/back/domain/board/dto/CategoryResponse.java b/src/main/java/com/back/domain/board/post/dto/CategoryResponse.java similarity index 83% rename from src/main/java/com/back/domain/board/dto/CategoryResponse.java rename to src/main/java/com/back/domain/board/post/dto/CategoryResponse.java index 87afe23c..c2de01a5 100644 --- a/src/main/java/com/back/domain/board/dto/CategoryResponse.java +++ b/src/main/java/com/back/domain/board/post/dto/CategoryResponse.java @@ -1,6 +1,6 @@ -package com.back.domain.board.dto; +package com.back.domain.board.post.dto; -import com.back.domain.board.entity.PostCategory; +import com.back.domain.board.post.entity.PostCategory; import com.querydsl.core.annotations.QueryProjection; /** diff --git a/src/main/java/com/back/domain/board/dto/PostDetailResponse.java b/src/main/java/com/back/domain/board/post/dto/PostDetailResponse.java similarity index 91% rename from src/main/java/com/back/domain/board/dto/PostDetailResponse.java rename to src/main/java/com/back/domain/board/post/dto/PostDetailResponse.java index b9dc5198..e14b124c 100644 --- a/src/main/java/com/back/domain/board/dto/PostDetailResponse.java +++ b/src/main/java/com/back/domain/board/post/dto/PostDetailResponse.java @@ -1,6 +1,7 @@ -package com.back.domain.board.dto; +package com.back.domain.board.post.dto; -import com.back.domain.board.entity.Post; +import com.back.domain.board.common.dto.AuthorResponse; +import com.back.domain.board.post.entity.Post; import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/com/back/domain/board/dto/PostListResponse.java b/src/main/java/com/back/domain/board/post/dto/PostListResponse.java similarity index 93% rename from src/main/java/com/back/domain/board/dto/PostListResponse.java rename to src/main/java/com/back/domain/board/post/dto/PostListResponse.java index ce80f6a7..9545bccf 100644 --- a/src/main/java/com/back/domain/board/dto/PostListResponse.java +++ b/src/main/java/com/back/domain/board/post/dto/PostListResponse.java @@ -1,5 +1,6 @@ -package com.back.domain.board.dto; +package com.back.domain.board.post.dto; +import com.back.domain.board.common.dto.AuthorResponse; import com.querydsl.core.annotations.QueryProjection; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/back/domain/board/dto/PostRequest.java b/src/main/java/com/back/domain/board/post/dto/PostRequest.java similarity index 90% rename from src/main/java/com/back/domain/board/dto/PostRequest.java rename to src/main/java/com/back/domain/board/post/dto/PostRequest.java index 1b8f655a..5deef459 100644 --- a/src/main/java/com/back/domain/board/dto/PostRequest.java +++ b/src/main/java/com/back/domain/board/post/dto/PostRequest.java @@ -1,4 +1,4 @@ -package com.back.domain.board.dto; +package com.back.domain.board.post.dto; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/back/domain/board/dto/PostResponse.java b/src/main/java/com/back/domain/board/post/dto/PostResponse.java similarity index 88% rename from src/main/java/com/back/domain/board/dto/PostResponse.java rename to src/main/java/com/back/domain/board/post/dto/PostResponse.java index a253bb4f..70d405c6 100644 --- a/src/main/java/com/back/domain/board/dto/PostResponse.java +++ b/src/main/java/com/back/domain/board/post/dto/PostResponse.java @@ -1,6 +1,7 @@ -package com.back.domain.board.dto; +package com.back.domain.board.post.dto; -import com.back.domain.board.entity.Post; +import com.back.domain.board.common.dto.AuthorResponse; +import com.back.domain.board.post.entity.Post; import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/com/back/domain/board/entity/Post.java b/src/main/java/com/back/domain/board/post/entity/Post.java similarity index 95% rename from src/main/java/com/back/domain/board/entity/Post.java rename to src/main/java/com/back/domain/board/post/entity/Post.java index a64297d5..b09a655a 100644 --- a/src/main/java/com/back/domain/board/entity/Post.java +++ b/src/main/java/com/back/domain/board/post/entity/Post.java @@ -1,5 +1,6 @@ -package com.back.domain.board.entity; +package com.back.domain.board.post.entity; +import com.back.domain.board.comment.entity.Comment; import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; import jakarta.persistence.*; diff --git a/src/main/java/com/back/domain/board/entity/PostBookmark.java b/src/main/java/com/back/domain/board/post/entity/PostBookmark.java similarity index 92% rename from src/main/java/com/back/domain/board/entity/PostBookmark.java rename to src/main/java/com/back/domain/board/post/entity/PostBookmark.java index 2964dc82..113b29f5 100644 --- a/src/main/java/com/back/domain/board/entity/PostBookmark.java +++ b/src/main/java/com/back/domain/board/post/entity/PostBookmark.java @@ -1,4 +1,4 @@ -package com.back.domain.board.entity; +package com.back.domain.board.post.entity; import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; diff --git a/src/main/java/com/back/domain/board/entity/PostCategory.java b/src/main/java/com/back/domain/board/post/entity/PostCategory.java similarity index 94% rename from src/main/java/com/back/domain/board/entity/PostCategory.java rename to src/main/java/com/back/domain/board/post/entity/PostCategory.java index b47332df..822712e1 100644 --- a/src/main/java/com/back/domain/board/entity/PostCategory.java +++ b/src/main/java/com/back/domain/board/post/entity/PostCategory.java @@ -1,4 +1,4 @@ -package com.back.domain.board.entity; +package com.back.domain.board.post.entity; import com.back.global.entity.BaseEntity; import jakarta.persistence.CascadeType; diff --git a/src/main/java/com/back/domain/board/entity/PostCategoryMapping.java b/src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java similarity index 93% rename from src/main/java/com/back/domain/board/entity/PostCategoryMapping.java rename to src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java index 5524e924..5af8c32f 100644 --- a/src/main/java/com/back/domain/board/entity/PostCategoryMapping.java +++ b/src/main/java/com/back/domain/board/post/entity/PostCategoryMapping.java @@ -1,4 +1,4 @@ -package com.back.domain.board.entity; +package com.back.domain.board.post.entity; import jakarta.persistence.*; import lombok.Getter; diff --git a/src/main/java/com/back/domain/board/entity/PostLike.java b/src/main/java/com/back/domain/board/post/entity/PostLike.java similarity index 92% rename from src/main/java/com/back/domain/board/entity/PostLike.java rename to src/main/java/com/back/domain/board/post/entity/PostLike.java index e25e74ea..87d33e49 100644 --- a/src/main/java/com/back/domain/board/entity/PostLike.java +++ b/src/main/java/com/back/domain/board/post/entity/PostLike.java @@ -1,4 +1,4 @@ -package com.back.domain.board.entity; +package com.back.domain.board.post.entity; import com.back.domain.user.entity.User; import com.back.global.entity.BaseEntity; diff --git a/src/main/java/com/back/domain/board/repository/PostCategoryRepository.java b/src/main/java/com/back/domain/board/post/repository/PostCategoryRepository.java similarity index 67% rename from src/main/java/com/back/domain/board/repository/PostCategoryRepository.java rename to src/main/java/com/back/domain/board/post/repository/PostCategoryRepository.java index 70e8a935..88fcf5d9 100644 --- a/src/main/java/com/back/domain/board/repository/PostCategoryRepository.java +++ b/src/main/java/com/back/domain/board/post/repository/PostCategoryRepository.java @@ -1,6 +1,6 @@ -package com.back.domain.board.repository; +package com.back.domain.board.post.repository; -import com.back.domain.board.entity.PostCategory; +import com.back.domain.board.post.entity.PostCategory; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/back/domain/board/repository/PostRepository.java b/src/main/java/com/back/domain/board/post/repository/PostRepository.java similarity index 69% rename from src/main/java/com/back/domain/board/repository/PostRepository.java rename to src/main/java/com/back/domain/board/post/repository/PostRepository.java index 32912081..2137b980 100644 --- a/src/main/java/com/back/domain/board/repository/PostRepository.java +++ b/src/main/java/com/back/domain/board/post/repository/PostRepository.java @@ -1,6 +1,6 @@ -package com.back.domain.board.repository; +package com.back.domain.board.post.repository; -import com.back.domain.board.entity.Post; +import com.back.domain.board.post.entity.Post; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/back/domain/board/repository/PostRepositoryCustom.java b/src/main/java/com/back/domain/board/post/repository/PostRepositoryCustom.java similarity index 70% rename from src/main/java/com/back/domain/board/repository/PostRepositoryCustom.java rename to src/main/java/com/back/domain/board/post/repository/PostRepositoryCustom.java index c00c5ba4..527d34d9 100644 --- a/src/main/java/com/back/domain/board/repository/PostRepositoryCustom.java +++ b/src/main/java/com/back/domain/board/post/repository/PostRepositoryCustom.java @@ -1,6 +1,6 @@ -package com.back.domain.board.repository; +package com.back.domain.board.post.repository; -import com.back.domain.board.dto.PostListResponse; +import com.back.domain.board.post.dto.PostListResponse; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java b/src/main/java/com/back/domain/board/post/repository/PostRepositoryImpl.java similarity index 96% rename from src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java rename to src/main/java/com/back/domain/board/post/repository/PostRepositoryImpl.java index cdd265f6..1d642642 100644 --- a/src/main/java/com/back/domain/board/repository/PostRepositoryImpl.java +++ b/src/main/java/com/back/domain/board/post/repository/PostRepositoryImpl.java @@ -1,7 +1,12 @@ -package com.back.domain.board.repository; - -import com.back.domain.board.dto.*; -import com.back.domain.board.entity.*; +package com.back.domain.board.post.repository; + +import com.back.domain.board.comment.entity.QComment; +import com.back.domain.board.common.dto.QAuthorResponse; +import com.back.domain.board.post.dto.CategoryResponse; +import com.back.domain.board.post.dto.PostListResponse; +import com.back.domain.board.post.dto.QCategoryResponse; +import com.back.domain.board.post.dto.QPostListResponse; +import com.back.domain.board.post.entity.*; import com.back.domain.user.entity.QUser; import com.back.domain.user.entity.QUserProfile; import com.querydsl.core.BooleanBuilder; diff --git a/src/main/java/com/back/domain/board/service/PostService.java b/src/main/java/com/back/domain/board/post/service/PostService.java similarity index 88% rename from src/main/java/com/back/domain/board/service/PostService.java rename to src/main/java/com/back/domain/board/post/service/PostService.java index 79f0bbec..995e37fa 100644 --- a/src/main/java/com/back/domain/board/service/PostService.java +++ b/src/main/java/com/back/domain/board/post/service/PostService.java @@ -1,10 +1,14 @@ -package com.back.domain.board.service; - -import com.back.domain.board.dto.*; -import com.back.domain.board.entity.Post; -import com.back.domain.board.entity.PostCategory; -import com.back.domain.board.repository.PostCategoryRepository; -import com.back.domain.board.repository.PostRepository; +package com.back.domain.board.post.service; + +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.post.entity.Post; +import com.back.domain.board.post.entity.PostCategory; +import com.back.domain.board.post.dto.PostDetailResponse; +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.repository.PostCategoryRepository; +import com.back.domain.board.post.repository.PostRepository; import com.back.domain.user.entity.User; import com.back.domain.user.repository.UserRepository; import com.back.global.exception.CustomException; 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 7feae8c9..bd77cb97 100644 --- a/src/main/java/com/back/domain/user/entity/User.java +++ b/src/main/java/com/back/domain/user/entity/User.java @@ -1,6 +1,10 @@ package com.back.domain.user.entity; -import com.back.domain.board.entity.*; +import com.back.domain.board.comment.entity.Comment; +import com.back.domain.board.comment.entity.CommentLike; +import com.back.domain.board.post.entity.Post; +import com.back.domain.board.post.entity.PostBookmark; +import com.back.domain.board.post.entity.PostLike; import com.back.domain.file.entity.FileAttachment; import com.back.domain.study.plan.entity.StudyPlan; import com.back.domain.study.todo.entity.Todo; diff --git a/src/test/java/com/back/domain/board/controller/CommentControllerTest.java b/src/test/java/com/back/domain/board/controller/CommentControllerTest.java index ac0c13c3..b4b29518 100644 --- a/src/test/java/com/back/domain/board/controller/CommentControllerTest.java +++ b/src/test/java/com/back/domain/board/controller/CommentControllerTest.java @@ -1,10 +1,10 @@ package com.back.domain.board.controller; -import com.back.domain.board.dto.CommentRequest; -import com.back.domain.board.entity.Comment; -import com.back.domain.board.entity.Post; -import com.back.domain.board.repository.CommentRepository; -import com.back.domain.board.repository.PostRepository; +import com.back.domain.board.comment.dto.CommentRequest; +import com.back.domain.board.comment.entity.Comment; +import com.back.domain.board.post.entity.Post; +import com.back.domain.board.comment.repository.CommentRepository; +import com.back.domain.board.post.repository.PostRepository; 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/controller/PostControllerTest.java b/src/test/java/com/back/domain/board/controller/PostControllerTest.java index 475d25bb..66b622e5 100644 --- a/src/test/java/com/back/domain/board/controller/PostControllerTest.java +++ b/src/test/java/com/back/domain/board/controller/PostControllerTest.java @@ -1,10 +1,10 @@ package com.back.domain.board.controller; -import com.back.domain.board.dto.PostRequest; -import com.back.domain.board.entity.Post; -import com.back.domain.board.entity.PostCategory; -import com.back.domain.board.repository.PostCategoryRepository; -import com.back.domain.board.repository.PostRepository; +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.repository.PostCategoryRepository; +import com.back.domain.board.post.repository.PostRepository; 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/CommentServiceTest.java b/src/test/java/com/back/domain/board/service/CommentServiceTest.java index 014460b5..c4dadec1 100644 --- a/src/test/java/com/back/domain/board/service/CommentServiceTest.java +++ b/src/test/java/com/back/domain/board/service/CommentServiceTest.java @@ -1,13 +1,14 @@ package com.back.domain.board.service; -import com.back.domain.board.dto.CommentListResponse; -import com.back.domain.board.dto.CommentRequest; -import com.back.domain.board.dto.CommentResponse; -import com.back.domain.board.dto.PageResponse; -import com.back.domain.board.entity.Comment; -import com.back.domain.board.entity.Post; -import com.back.domain.board.repository.CommentRepository; -import com.back.domain.board.repository.PostRepository; +import com.back.domain.board.comment.dto.CommentListResponse; +import com.back.domain.board.comment.dto.CommentRequest; +import com.back.domain.board.comment.dto.CommentResponse; +import com.back.domain.board.comment.service.CommentService; +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.comment.entity.Comment; +import com.back.domain.board.post.entity.Post; +import com.back.domain.board.comment.repository.CommentRepository; +import com.back.domain.board.post.repository.PostRepository; 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/PostServiceTest.java b/src/test/java/com/back/domain/board/service/PostServiceTest.java index ec76332c..512ddb30 100644 --- a/src/test/java/com/back/domain/board/service/PostServiceTest.java +++ b/src/test/java/com/back/domain/board/service/PostServiceTest.java @@ -1,10 +1,15 @@ package com.back.domain.board.service; -import com.back.domain.board.dto.*; -import com.back.domain.board.entity.Post; -import com.back.domain.board.entity.PostCategory; -import com.back.domain.board.repository.PostCategoryRepository; -import com.back.domain.board.repository.PostRepository; +import com.back.domain.board.common.dto.PageResponse; +import com.back.domain.board.post.entity.Post; +import com.back.domain.board.post.entity.PostCategory; +import com.back.domain.board.post.dto.PostDetailResponse; +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.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;