diff --git a/src/main/java/com/example/solidconnection/board/service/BoardService.java b/src/main/java/com/example/solidconnection/board/service/BoardService.java deleted file mode 100644 index 2513e0903..000000000 --- a/src/main/java/com/example/solidconnection/board/service/BoardService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.example.solidconnection.board.service; - -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.board.repository.BoardRepository; -import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.custom.exception.ErrorCode; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.BoardFindPostResponse; -import com.example.solidconnection.type.BoardCode; -import com.example.solidconnection.type.PostCategory; -import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.EnumUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.stream.Collectors; - -import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_POST_CATEGORY; - -@Service -@RequiredArgsConstructor -public class BoardService { - private final BoardRepository boardRepository; - - @Transactional(readOnly = true) - public List findPostsByCodeAndPostCategory(String code, String category) { - - String boardCode = validateCode(code); - PostCategory postCategory = validatePostCategory(category); - - Board board = boardRepository.getByCodeUsingEntityGraph(boardCode); - List postList = getPostListByPostCategory(board.getPostList(), postCategory); - - return BoardFindPostResponse.from(postList); - } - - private String validateCode(String code) { - try { - return String.valueOf(BoardCode.valueOf(code)); - } catch (IllegalArgumentException ex) { - throw new CustomException(ErrorCode.INVALID_BOARD_CODE); - } - } - - private PostCategory validatePostCategory(String category) { - if (!EnumUtils.isValidEnum(PostCategory.class, category)) { - throw new CustomException(INVALID_POST_CATEGORY); - } - return PostCategory.valueOf(category); - } - - private List getPostListByPostCategory(List postList, PostCategory postCategory) { - if (postCategory.equals(PostCategory.전체)) { - return postList; - } - return postList.stream() - .filter(post -> post.getCategory().equals(postCategory)) - .collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/example/solidconnection/board/controller/BoardController.java b/src/main/java/com/example/solidconnection/community/board/controller/BoardController.java similarity index 52% rename from src/main/java/com/example/solidconnection/board/controller/BoardController.java rename to src/main/java/com/example/solidconnection/community/board/controller/BoardController.java index f6ebb27d0..9329535a1 100644 --- a/src/main/java/com/example/solidconnection/board/controller/BoardController.java +++ b/src/main/java/com/example/solidconnection/community/board/controller/BoardController.java @@ -1,14 +1,10 @@ -package com.example.solidconnection.board.controller; +package com.example.solidconnection.community.board.controller; -import com.example.solidconnection.board.service.BoardService; -import com.example.solidconnection.post.dto.BoardFindPostResponse; import com.example.solidconnection.type.BoardCode; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -19,8 +15,6 @@ @RequestMapping("/communities") public class BoardController { - private final BoardService boardService; - // todo: 회원별로 접근 가능한 게시판 목록 조회 기능 개발 @GetMapping() public ResponseEntity findAccessibleCodes() { @@ -30,14 +24,4 @@ public ResponseEntity findAccessibleCodes() { } return ResponseEntity.ok().body(accessibleCodeList); } - - @GetMapping("/{code}") - public ResponseEntity findPostsByCodeAndCategory( - @PathVariable(value = "code") String code, - @RequestParam(value = "category", defaultValue = "전체") String category) { - - List postsByCodeAndPostCategory = boardService - .findPostsByCodeAndPostCategory(code, category); - return ResponseEntity.ok().body(postsByCodeAndPostCategory); - } } diff --git a/src/main/java/com/example/solidconnection/board/domain/Board.java b/src/main/java/com/example/solidconnection/community/board/domain/Board.java similarity index 85% rename from src/main/java/com/example/solidconnection/board/domain/Board.java rename to src/main/java/com/example/solidconnection/community/board/domain/Board.java index 77d0aada8..fbf13b44d 100644 --- a/src/main/java/com/example/solidconnection/board/domain/Board.java +++ b/src/main/java/com/example/solidconnection/community/board/domain/Board.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.board.domain; +package com.example.solidconnection.community.board.domain; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/com/example/solidconnection/board/dto/PostFindBoardResponse.java b/src/main/java/com/example/solidconnection/community/board/dto/PostFindBoardResponse.java similarity index 69% rename from src/main/java/com/example/solidconnection/board/dto/PostFindBoardResponse.java rename to src/main/java/com/example/solidconnection/community/board/dto/PostFindBoardResponse.java index b06baa305..e4f66afdd 100644 --- a/src/main/java/com/example/solidconnection/board/dto/PostFindBoardResponse.java +++ b/src/main/java/com/example/solidconnection/community/board/dto/PostFindBoardResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.board.dto; +package com.example.solidconnection.community.board.dto; -import com.example.solidconnection.board.domain.Board; +import com.example.solidconnection.community.board.domain.Board; public record PostFindBoardResponse( String code, diff --git a/src/main/java/com/example/solidconnection/board/repository/BoardRepository.java b/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java similarity index 88% rename from src/main/java/com/example/solidconnection/board/repository/BoardRepository.java rename to src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java index 5c4538279..06dd01161 100644 --- a/src/main/java/com/example/solidconnection/board/repository/BoardRepository.java +++ b/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.board.repository; +package com.example.solidconnection.community.board.repository; -import com.example.solidconnection.board.domain.Board; +import com.example.solidconnection.community.board.domain.Board; import com.example.solidconnection.custom.exception.CustomException; import com.example.solidconnection.custom.exception.ErrorCode; import org.springframework.data.jpa.repository.EntityGraph; diff --git a/src/main/java/com/example/solidconnection/community/board/service/BoardService.java b/src/main/java/com/example/solidconnection/community/board/service/BoardService.java new file mode 100644 index 000000000..c918f8126 --- /dev/null +++ b/src/main/java/com/example/solidconnection/community/board/service/BoardService.java @@ -0,0 +1,9 @@ +package com.example.solidconnection.community.board.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class BoardService { +} diff --git a/src/main/java/com/example/solidconnection/comment/controller/CommentController.java b/src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java similarity index 80% rename from src/main/java/com/example/solidconnection/comment/controller/CommentController.java rename to src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java index fda360b4a..e215fea72 100644 --- a/src/main/java/com/example/solidconnection/comment/controller/CommentController.java +++ b/src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java @@ -1,11 +1,11 @@ -package com.example.solidconnection.comment.controller; +package com.example.solidconnection.community.comment.controller; -import com.example.solidconnection.comment.dto.CommentCreateRequest; -import com.example.solidconnection.comment.dto.CommentCreateResponse; -import com.example.solidconnection.comment.dto.CommentDeleteResponse; -import com.example.solidconnection.comment.dto.CommentUpdateRequest; -import com.example.solidconnection.comment.dto.CommentUpdateResponse; -import com.example.solidconnection.comment.service.CommentService; +import com.example.solidconnection.community.comment.dto.CommentCreateRequest; +import com.example.solidconnection.community.comment.dto.CommentCreateResponse; +import com.example.solidconnection.community.comment.dto.CommentDeleteResponse; +import com.example.solidconnection.community.comment.dto.CommentUpdateRequest; +import com.example.solidconnection.community.comment.dto.CommentUpdateResponse; +import com.example.solidconnection.community.comment.service.CommentService; import com.example.solidconnection.custom.resolver.AuthorizedUser; import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; diff --git a/src/main/java/com/example/solidconnection/comment/domain/Comment.java b/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java similarity index 96% rename from src/main/java/com/example/solidconnection/comment/domain/Comment.java rename to src/main/java/com/example/solidconnection/community/comment/domain/Comment.java index a4d147a61..abed4b8f0 100644 --- a/src/main/java/com/example/solidconnection/comment/domain/Comment.java +++ b/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java @@ -1,7 +1,7 @@ -package com.example.solidconnection.comment.domain; +package com.example.solidconnection.community.comment.domain; import com.example.solidconnection.entity.common.BaseEntity; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; diff --git a/src/main/java/com/example/solidconnection/comment/dto/CommentCreateRequest.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java similarity index 81% rename from src/main/java/com/example/solidconnection/comment/dto/CommentCreateRequest.java rename to src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java index c2065685b..610f602c8 100644 --- a/src/main/java/com/example/solidconnection/comment/dto/CommentCreateRequest.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java @@ -1,7 +1,7 @@ -package com.example.solidconnection.comment.dto; +package com.example.solidconnection.community.comment.dto; -import com.example.solidconnection.comment.domain.Comment; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.comment.domain.Comment; +import com.example.solidconnection.community.post.domain.Post; import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/src/main/java/com/example/solidconnection/comment/dto/CommentCreateResponse.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateResponse.java similarity index 62% rename from src/main/java/com/example/solidconnection/comment/dto/CommentCreateResponse.java rename to src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateResponse.java index 60d7529c2..58964f326 100644 --- a/src/main/java/com/example/solidconnection/comment/dto/CommentCreateResponse.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.comment.dto; +package com.example.solidconnection.community.comment.dto; -import com.example.solidconnection.comment.domain.Comment; +import com.example.solidconnection.community.comment.domain.Comment; public record CommentCreateResponse( Long id diff --git a/src/main/java/com/example/solidconnection/comment/dto/CommentDeleteResponse.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentDeleteResponse.java similarity index 50% rename from src/main/java/com/example/solidconnection/comment/dto/CommentDeleteResponse.java rename to src/main/java/com/example/solidconnection/community/comment/dto/CommentDeleteResponse.java index 393e4fe8b..5283bb87f 100644 --- a/src/main/java/com/example/solidconnection/comment/dto/CommentDeleteResponse.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentDeleteResponse.java @@ -1,4 +1,4 @@ -package com.example.solidconnection.comment.dto; +package com.example.solidconnection.community.comment.dto; public record CommentDeleteResponse( Long id diff --git a/src/main/java/com/example/solidconnection/comment/dto/CommentUpdateRequest.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentUpdateRequest.java similarity index 85% rename from src/main/java/com/example/solidconnection/comment/dto/CommentUpdateRequest.java rename to src/main/java/com/example/solidconnection/community/comment/dto/CommentUpdateRequest.java index d99429931..6e14dab45 100644 --- a/src/main/java/com/example/solidconnection/comment/dto/CommentUpdateRequest.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentUpdateRequest.java @@ -1,4 +1,4 @@ -package com.example.solidconnection.comment.dto; +package com.example.solidconnection.community.comment.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; diff --git a/src/main/java/com/example/solidconnection/comment/dto/CommentUpdateResponse.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentUpdateResponse.java similarity index 62% rename from src/main/java/com/example/solidconnection/comment/dto/CommentUpdateResponse.java rename to src/main/java/com/example/solidconnection/community/comment/dto/CommentUpdateResponse.java index b621ab111..5446753e4 100644 --- a/src/main/java/com/example/solidconnection/comment/dto/CommentUpdateResponse.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentUpdateResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.comment.dto; +package com.example.solidconnection.community.comment.dto; -import com.example.solidconnection.comment.domain.Comment; +import com.example.solidconnection.community.comment.domain.Comment; public record CommentUpdateResponse( Long id diff --git a/src/main/java/com/example/solidconnection/comment/dto/PostFindCommentResponse.java b/src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java similarity index 88% rename from src/main/java/com/example/solidconnection/comment/dto/PostFindCommentResponse.java rename to src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java index a0d68066a..f1fd78ad0 100644 --- a/src/main/java/com/example/solidconnection/comment/dto/PostFindCommentResponse.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.comment.dto; +package com.example.solidconnection.community.comment.dto; -import com.example.solidconnection.comment.domain.Comment; +import com.example.solidconnection.community.comment.domain.Comment; import com.example.solidconnection.siteuser.dto.PostFindSiteUserResponse; import java.time.ZonedDateTime; diff --git a/src/main/java/com/example/solidconnection/comment/repository/CommentRepository.java b/src/main/java/com/example/solidconnection/community/comment/repository/CommentRepository.java similarity index 91% rename from src/main/java/com/example/solidconnection/comment/repository/CommentRepository.java rename to src/main/java/com/example/solidconnection/community/comment/repository/CommentRepository.java index ce37c42a1..e5feb3f04 100644 --- a/src/main/java/com/example/solidconnection/comment/repository/CommentRepository.java +++ b/src/main/java/com/example/solidconnection/community/comment/repository/CommentRepository.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.comment.repository; +package com.example.solidconnection.community.comment.repository; -import com.example.solidconnection.comment.domain.Comment; +import com.example.solidconnection.community.comment.domain.Comment; import com.example.solidconnection.custom.exception.CustomException; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/example/solidconnection/comment/service/CommentService.java b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java similarity index 84% rename from src/main/java/com/example/solidconnection/comment/service/CommentService.java rename to src/main/java/com/example/solidconnection/community/comment/service/CommentService.java index b7c1c6068..209dd6987 100644 --- a/src/main/java/com/example/solidconnection/comment/service/CommentService.java +++ b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java @@ -1,16 +1,16 @@ -package com.example.solidconnection.comment.service; - -import com.example.solidconnection.comment.domain.Comment; -import com.example.solidconnection.comment.dto.CommentCreateRequest; -import com.example.solidconnection.comment.dto.CommentCreateResponse; -import com.example.solidconnection.comment.dto.CommentDeleteResponse; -import com.example.solidconnection.comment.dto.CommentUpdateRequest; -import com.example.solidconnection.comment.dto.CommentUpdateResponse; -import com.example.solidconnection.comment.dto.PostFindCommentResponse; -import com.example.solidconnection.comment.repository.CommentRepository; +package com.example.solidconnection.community.comment.service; + +import com.example.solidconnection.community.comment.domain.Comment; +import com.example.solidconnection.community.comment.dto.CommentCreateRequest; +import com.example.solidconnection.community.comment.dto.CommentCreateResponse; +import com.example.solidconnection.community.comment.dto.CommentDeleteResponse; +import com.example.solidconnection.community.comment.dto.CommentUpdateRequest; +import com.example.solidconnection.community.comment.dto.CommentUpdateResponse; +import com.example.solidconnection.community.comment.dto.PostFindCommentResponse; +import com.example.solidconnection.community.comment.repository.CommentRepository; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/example/solidconnection/post/controller/PostController.java b/src/main/java/com/example/solidconnection/community/post/controller/PostController.java similarity index 75% rename from src/main/java/com/example/solidconnection/post/controller/PostController.java rename to src/main/java/com/example/solidconnection/community/post/controller/PostController.java index bc3f9d123..a2479f08b 100644 --- a/src/main/java/com/example/solidconnection/post/controller/PostController.java +++ b/src/main/java/com/example/solidconnection/community/post/controller/PostController.java @@ -1,17 +1,18 @@ -package com.example.solidconnection.post.controller; +package com.example.solidconnection.community.post.controller; +import com.example.solidconnection.community.post.dto.PostListResponse; import com.example.solidconnection.custom.resolver.AuthorizedUser; -import com.example.solidconnection.post.dto.PostCreateRequest; -import com.example.solidconnection.post.dto.PostCreateResponse; -import com.example.solidconnection.post.dto.PostDeleteResponse; -import com.example.solidconnection.post.dto.PostDislikeResponse; -import com.example.solidconnection.post.dto.PostFindResponse; -import com.example.solidconnection.post.dto.PostLikeResponse; -import com.example.solidconnection.post.dto.PostUpdateRequest; -import com.example.solidconnection.post.dto.PostUpdateResponse; -import com.example.solidconnection.post.service.PostCommandService; -import com.example.solidconnection.post.service.PostLikeService; -import com.example.solidconnection.post.service.PostQueryService; +import com.example.solidconnection.community.post.dto.PostCreateRequest; +import com.example.solidconnection.community.post.dto.PostCreateResponse; +import com.example.solidconnection.community.post.dto.PostDeleteResponse; +import com.example.solidconnection.community.post.dto.PostDislikeResponse; +import com.example.solidconnection.community.post.dto.PostFindResponse; +import com.example.solidconnection.community.post.dto.PostLikeResponse; +import com.example.solidconnection.community.post.dto.PostUpdateRequest; +import com.example.solidconnection.community.post.dto.PostUpdateResponse; +import com.example.solidconnection.community.post.service.PostCommandService; +import com.example.solidconnection.community.post.service.PostLikeService; +import com.example.solidconnection.community.post.service.PostQueryService; import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -39,6 +40,16 @@ public class PostController { private final PostCommandService postCommandService; private final PostLikeService postLikeService; + @GetMapping("/{code}") + public ResponseEntity findPostsByCodeAndCategory( + @PathVariable(value = "code") String code, + @RequestParam(value = "category", defaultValue = "전체") String category) { + + List postsByCodeAndPostCategory = postQueryService + .findPostsByCodeAndPostCategory(code, category); + return ResponseEntity.ok().body(postsByCodeAndPostCategory); + } + @PostMapping(value = "/{code}/posts") public ResponseEntity createPost( @AuthorizedUser SiteUser siteUser, diff --git a/src/main/java/com/example/solidconnection/post/domain/Post.java b/src/main/java/com/example/solidconnection/community/post/domain/Post.java similarity index 92% rename from src/main/java/com/example/solidconnection/post/domain/Post.java rename to src/main/java/com/example/solidconnection/community/post/domain/Post.java index 31125f8bd..4d96b9b22 100644 --- a/src/main/java/com/example/solidconnection/post/domain/Post.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/Post.java @@ -1,10 +1,9 @@ -package com.example.solidconnection.post.domain; +package com.example.solidconnection.community.post.domain; -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.comment.domain.Comment; -import com.example.solidconnection.entity.PostImage; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.comment.domain.Comment; import com.example.solidconnection.entity.common.BaseEntity; -import com.example.solidconnection.post.dto.PostUpdateRequest; +import com.example.solidconnection.community.post.dto.PostUpdateRequest; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.type.PostCategory; import jakarta.persistence.CascadeType; diff --git a/src/main/java/com/example/solidconnection/entity/PostImage.java b/src/main/java/com/example/solidconnection/community/post/domain/PostImage.java similarity index 90% rename from src/main/java/com/example/solidconnection/entity/PostImage.java rename to src/main/java/com/example/solidconnection/community/post/domain/PostImage.java index 653beecc4..5bf885741 100644 --- a/src/main/java/com/example/solidconnection/entity/PostImage.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/PostImage.java @@ -1,6 +1,5 @@ -package com.example.solidconnection.entity; +package com.example.solidconnection.community.post.domain; -import com.example.solidconnection.post.domain.Post; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; diff --git a/src/main/java/com/example/solidconnection/post/domain/PostLike.java b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java similarity index 96% rename from src/main/java/com/example/solidconnection/post/domain/PostLike.java rename to src/main/java/com/example/solidconnection/community/post/domain/PostLike.java index 9edf4052e..bbe1ff361 100644 --- a/src/main/java/com/example/solidconnection/post/domain/PostLike.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java @@ -1,4 +1,4 @@ -package com.example.solidconnection.post.domain; +package com.example.solidconnection.community.post.domain; import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.persistence.Entity; diff --git a/src/main/java/com/example/solidconnection/post/dto/PostCreateRequest.java b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java similarity index 87% rename from src/main/java/com/example/solidconnection/post/dto/PostCreateRequest.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java index a1ba1c696..db271a80f 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostCreateRequest.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java @@ -1,7 +1,7 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.post.domain.Post; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.type.PostCategory; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/example/solidconnection/post/dto/PostCreateResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateResponse.java similarity index 62% rename from src/main/java/com/example/solidconnection/post/dto/PostCreateResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostCreateResponse.java index a514ffca6..51cc0c72e 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostCreateResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; public record PostCreateResponse( Long id diff --git a/src/main/java/com/example/solidconnection/post/dto/PostDeleteResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostDeleteResponse.java similarity index 50% rename from src/main/java/com/example/solidconnection/post/dto/PostDeleteResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostDeleteResponse.java index 23c67670d..f98f5264f 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostDeleteResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostDeleteResponse.java @@ -1,4 +1,4 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; public record PostDeleteResponse( Long id diff --git a/src/main/java/com/example/solidconnection/post/dto/PostDislikeResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostDislikeResponse.java similarity index 68% rename from src/main/java/com/example/solidconnection/post/dto/PostDislikeResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostDislikeResponse.java index 14de9987d..83ffc8305 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostDislikeResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostDislikeResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; public record PostDislikeResponse( Long likeCount, diff --git a/src/main/java/com/example/solidconnection/post/dto/PostFindPostImageResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostFindPostImageResponse.java similarity index 82% rename from src/main/java/com/example/solidconnection/post/dto/PostFindPostImageResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostFindPostImageResponse.java index 63adf0020..648bdb72c 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostFindPostImageResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostFindPostImageResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.entity.PostImage; +import com.example.solidconnection.community.post.domain.PostImage; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/com/example/solidconnection/post/dto/PostFindResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostFindResponse.java similarity index 86% rename from src/main/java/com/example/solidconnection/post/dto/PostFindResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostFindResponse.java index 1562dd5bc..735defac1 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostFindResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostFindResponse.java @@ -1,8 +1,8 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.board.dto.PostFindBoardResponse; -import com.example.solidconnection.comment.dto.PostFindCommentResponse; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.board.dto.PostFindBoardResponse; +import com.example.solidconnection.community.comment.dto.PostFindCommentResponse; +import com.example.solidconnection.community.post.domain.Post; import com.example.solidconnection.siteuser.dto.PostFindSiteUserResponse; import java.time.ZonedDateTime; diff --git a/src/main/java/com/example/solidconnection/post/dto/PostLikeResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostLikeResponse.java similarity index 68% rename from src/main/java/com/example/solidconnection/post/dto/PostLikeResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostLikeResponse.java index 35d7d58c9..35b2840c0 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostLikeResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostLikeResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; public record PostLikeResponse( Long likeCount, diff --git a/src/main/java/com/example/solidconnection/post/dto/BoardFindPostResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostListResponse.java similarity index 72% rename from src/main/java/com/example/solidconnection/post/dto/BoardFindPostResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostListResponse.java index 4f475824c..f02af017e 100644 --- a/src/main/java/com/example/solidconnection/post/dto/BoardFindPostResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostListResponse.java @@ -1,13 +1,13 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.entity.PostImage; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.PostImage; +import com.example.solidconnection.community.post.domain.Post; import java.time.ZonedDateTime; import java.util.List; import java.util.stream.Collectors; -public record BoardFindPostResponse( +public record PostListResponse( Long id, String title, String content, @@ -19,8 +19,8 @@ public record BoardFindPostResponse( String url ) { - public static BoardFindPostResponse from(Post post) { - return new BoardFindPostResponse( + public static PostListResponse from(Post post) { + return new PostListResponse( post.getId(), post.getTitle(), post.getContent(), @@ -33,9 +33,9 @@ public static BoardFindPostResponse from(Post post) { ); } - public static List from(List postList) { + public static List from(List postList) { return postList.stream() - .map(BoardFindPostResponse::from) + .map(PostListResponse::from) .collect(Collectors.toList()); } diff --git a/src/main/java/com/example/solidconnection/post/dto/PostUpdateRequest.java b/src/main/java/com/example/solidconnection/community/post/dto/PostUpdateRequest.java similarity index 92% rename from src/main/java/com/example/solidconnection/post/dto/PostUpdateRequest.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostUpdateRequest.java index b9bdc6f54..339be3519 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostUpdateRequest.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostUpdateRequest.java @@ -1,4 +1,4 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/com/example/solidconnection/post/dto/PostUpdateResponse.java b/src/main/java/com/example/solidconnection/community/post/dto/PostUpdateResponse.java similarity index 62% rename from src/main/java/com/example/solidconnection/post/dto/PostUpdateResponse.java rename to src/main/java/com/example/solidconnection/community/post/dto/PostUpdateResponse.java index 70d656766..5c35f031d 100644 --- a/src/main/java/com/example/solidconnection/post/dto/PostUpdateResponse.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostUpdateResponse.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.post.dto; +package com.example.solidconnection.community.post.dto; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; public record PostUpdateResponse( Long id diff --git a/src/main/java/com/example/solidconnection/repositories/PostImageRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostImageRepository.java similarity index 61% rename from src/main/java/com/example/solidconnection/repositories/PostImageRepository.java rename to src/main/java/com/example/solidconnection/community/post/repository/PostImageRepository.java index 0ae776877..54c43f375 100644 --- a/src/main/java/com/example/solidconnection/repositories/PostImageRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostImageRepository.java @@ -1,6 +1,6 @@ -package com.example.solidconnection.repositories; +package com.example.solidconnection.community.post.repository; -import com.example.solidconnection.entity.PostImage; +import com.example.solidconnection.community.post.domain.PostImage; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/solidconnection/post/repository/PostLikeRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java similarity index 79% rename from src/main/java/com/example/solidconnection/post/repository/PostLikeRepository.java rename to src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java index bebde7a92..417e97310 100644 --- a/src/main/java/com/example/solidconnection/post/repository/PostLikeRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java @@ -1,8 +1,8 @@ -package com.example.solidconnection.post.repository; +package com.example.solidconnection.community.post.repository; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.domain.PostLike; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.domain.PostLike; import com.example.solidconnection.siteuser.domain.SiteUser; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/solidconnection/post/repository/PostRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java similarity index 93% rename from src/main/java/com/example/solidconnection/post/repository/PostRepository.java rename to src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java index e96881147..336189b05 100644 --- a/src/main/java/com/example/solidconnection/post/repository/PostRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java @@ -1,7 +1,7 @@ -package com.example.solidconnection.post.repository; +package com.example.solidconnection.community.post.repository; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.community.post.domain.Post; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; diff --git a/src/main/java/com/example/solidconnection/post/service/PostCommandService.java b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java similarity index 87% rename from src/main/java/com/example/solidconnection/post/service/PostCommandService.java rename to src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java index 74eb86310..1e66b52a4 100644 --- a/src/main/java/com/example/solidconnection/post/service/PostCommandService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java @@ -1,16 +1,16 @@ -package com.example.solidconnection.post.service; +package com.example.solidconnection.community.post.service; -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.board.repository.BoardRepository; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.board.repository.BoardRepository; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.entity.PostImage; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.PostCreateRequest; -import com.example.solidconnection.post.dto.PostCreateResponse; -import com.example.solidconnection.post.dto.PostDeleteResponse; -import com.example.solidconnection.post.dto.PostUpdateRequest; -import com.example.solidconnection.post.dto.PostUpdateResponse; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.PostImage; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.dto.PostCreateRequest; +import com.example.solidconnection.community.post.dto.PostCreateResponse; +import com.example.solidconnection.community.post.dto.PostDeleteResponse; +import com.example.solidconnection.community.post.dto.PostUpdateRequest; +import com.example.solidconnection.community.post.dto.PostUpdateResponse; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.s3.S3Service; import com.example.solidconnection.s3.UploadedFileUrlResponse; import com.example.solidconnection.service.RedisService; diff --git a/src/main/java/com/example/solidconnection/post/service/PostLikeService.java b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java similarity index 83% rename from src/main/java/com/example/solidconnection/post/service/PostLikeService.java rename to src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java index 5aaf994c7..045c069cd 100644 --- a/src/main/java/com/example/solidconnection/post/service/PostLikeService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java @@ -1,12 +1,12 @@ -package com.example.solidconnection.post.service; +package com.example.solidconnection.community.post.service; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.domain.PostLike; -import com.example.solidconnection.post.dto.PostDislikeResponse; -import com.example.solidconnection.post.dto.PostLikeResponse; -import com.example.solidconnection.post.repository.PostLikeRepository; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.domain.PostLike; +import com.example.solidconnection.community.post.dto.PostDislikeResponse; +import com.example.solidconnection.community.post.dto.PostLikeResponse; +import com.example.solidconnection.community.post.repository.PostLikeRepository; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.type.BoardCode; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/example/solidconnection/post/service/PostQueryService.java b/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java similarity index 55% rename from src/main/java/com/example/solidconnection/post/service/PostQueryService.java rename to src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java index a45ca3968..1d7f292ea 100644 --- a/src/main/java/com/example/solidconnection/post/service/PostQueryService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java @@ -1,36 +1,56 @@ -package com.example.solidconnection.post.service; +package com.example.solidconnection.community.post.service; -import com.example.solidconnection.board.dto.PostFindBoardResponse; -import com.example.solidconnection.comment.dto.PostFindCommentResponse; -import com.example.solidconnection.comment.service.CommentService; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.board.dto.PostFindBoardResponse; +import com.example.solidconnection.community.comment.dto.PostFindCommentResponse; +import com.example.solidconnection.community.post.dto.PostListResponse; +import com.example.solidconnection.community.board.repository.BoardRepository; +import com.example.solidconnection.community.comment.service.CommentService; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.PostFindPostImageResponse; -import com.example.solidconnection.post.dto.PostFindResponse; -import com.example.solidconnection.post.repository.PostLikeRepository; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.dto.PostFindPostImageResponse; +import com.example.solidconnection.community.post.dto.PostFindResponse; +import com.example.solidconnection.community.post.repository.PostLikeRepository; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.service.RedisService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.PostFindSiteUserResponse; import com.example.solidconnection.type.BoardCode; +import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.util.RedisUtils; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.EnumUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.stream.Collectors; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_BOARD_CODE; +import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_POST_CATEGORY; @Service @RequiredArgsConstructor public class PostQueryService { + private final BoardRepository boardRepository; private final PostRepository postRepository; + private final PostLikeRepository postLikeRepository; private final CommentService commentService; private final RedisService redisService; private final RedisUtils redisUtils; - private final PostLikeRepository postLikeRepository; + + @Transactional(readOnly = true) + public List findPostsByCodeAndPostCategory(String code, String category) { + + String boardCode = validateCode(code); + PostCategory postCategory = validatePostCategory(category); + + Board board = boardRepository.getByCodeUsingEntityGraph(boardCode); + List postList = getPostListByPostCategory(board.getPostList(), postCategory); + + return PostListResponse.from(postList); + } @Transactional(readOnly = true) public PostFindResponse findPostById(SiteUser siteUser, String code, Long postId) { @@ -70,4 +90,20 @@ private Boolean getIsLiked(Post post, SiteUser siteUser) { return postLikeRepository.findPostLikeByPostAndSiteUser(post, siteUser) .isPresent(); } + + private PostCategory validatePostCategory(String category) { + if (!EnumUtils.isValidEnum(PostCategory.class, category)) { + throw new CustomException(INVALID_POST_CATEGORY); + } + return PostCategory.valueOf(category); + } + + private List getPostListByPostCategory(List postList, PostCategory postCategory) { + if (postCategory.equals(PostCategory.전체)) { + return postList; + } + return postList.stream() + .filter(post -> post.getCategory().equals(postCategory)) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/example/solidconnection/service/UpdateViewCountService.java b/src/main/java/com/example/solidconnection/service/UpdateViewCountService.java index 55d4d9eba..2b67e25ec 100644 --- a/src/main/java/com/example/solidconnection/service/UpdateViewCountService.java +++ b/src/main/java/com/example/solidconnection/service/UpdateViewCountService.java @@ -1,7 +1,7 @@ package com.example.solidconnection.service; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.util.RedisUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java index 2c2a5d8be..83a439b19 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -1,8 +1,8 @@ package com.example.solidconnection.siteuser.domain; -import com.example.solidconnection.comment.domain.Comment; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.domain.PostLike; +import com.example.solidconnection.community.comment.domain.Comment; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.domain.PostLike; import com.example.solidconnection.score.domain.GpaScore; import com.example.solidconnection.score.domain.LanguageTestScore; import com.example.solidconnection.type.Gender; diff --git a/src/test/java/com/example/solidconnection/board/service/BoardServiceTest.java b/src/test/java/com/example/solidconnection/board/service/BoardServiceTest.java deleted file mode 100644 index 98c2b28fa..000000000 --- a/src/test/java/com/example/solidconnection/board/service/BoardServiceTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.example.solidconnection.board.service; - -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.BoardFindPostResponse; -import com.example.solidconnection.support.integration.BaseIntegrationTest; -import com.example.solidconnection.type.BoardCode; -import com.example.solidconnection.type.PostCategory; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.time.ZonedDateTime; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -@DisplayName("게시판 서비스 테스트") -class BoardServiceTest extends BaseIntegrationTest { - - @Autowired - private BoardService boardService; - - @Test - void 게시판_코드와_카테고리로_게시글_목록을_조회한다() { - // given - List posts = List.of( - 미주권_자유게시글, 아시아권_자유게시글, 유럽권_자유게시글, 자유게시판_자유게시글, - 미주권_질문게시글, 아시아권_질문게시글, 유럽권_질문게시글, 자유게시판_질문게시글 - ); - List expectedPosts = posts.stream() - .filter(post -> post.getCategory().equals(PostCategory.자유) && post.getBoard().getCode().equals(BoardCode.FREE.name())) - .toList(); - List expectedResponses = BoardFindPostResponse.from(expectedPosts); - - // when - List actualResponses = boardService.findPostsByCodeAndPostCategory( - BoardCode.FREE.name(), - PostCategory.자유.name() - ); - - // then - assertThat(actualResponses) - .usingRecursiveComparison() - .ignoringFieldsOfTypes(ZonedDateTime.class) - .isEqualTo(expectedResponses); - } - - @Test - void 전체_카테고리로_조회시_해당_게시판의_모든_게시글을_조회한다() { - // given - List posts = List.of( - 미주권_자유게시글, 아시아권_자유게시글, 유럽권_자유게시글, 자유게시판_자유게시글, - 미주권_질문게시글, 아시아권_질문게시글, 유럽권_질문게시글, 자유게시판_질문게시글 - ); - List expectedPosts = posts.stream() - .filter(post -> post.getBoard().getCode().equals(BoardCode.FREE.name())) - .toList(); - List expectedResponses = BoardFindPostResponse.from(expectedPosts); - - // when - List actualResponses = boardService.findPostsByCodeAndPostCategory( - BoardCode.FREE.name(), - PostCategory.전체.name() - ); - - // then - assertThat(actualResponses) - .usingRecursiveComparison() - .ignoringFieldsOfTypes(ZonedDateTime.class) - .isEqualTo(expectedResponses); - } -} diff --git a/src/test/java/com/example/solidconnection/comment/service/CommentServiceTest.java b/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java similarity index 95% rename from src/test/java/com/example/solidconnection/comment/service/CommentServiceTest.java rename to src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java index d38463dcb..fca6cd41e 100644 --- a/src/test/java/com/example/solidconnection/comment/service/CommentServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java @@ -1,17 +1,17 @@ -package com.example.solidconnection.comment.service; - -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.comment.domain.Comment; -import com.example.solidconnection.comment.dto.CommentCreateRequest; -import com.example.solidconnection.comment.dto.CommentCreateResponse; -import com.example.solidconnection.comment.dto.CommentDeleteResponse; -import com.example.solidconnection.comment.dto.CommentUpdateRequest; -import com.example.solidconnection.comment.dto.CommentUpdateResponse; -import com.example.solidconnection.comment.dto.PostFindCommentResponse; -import com.example.solidconnection.comment.repository.CommentRepository; +package com.example.solidconnection.community.comment.service; + +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.comment.domain.Comment; +import com.example.solidconnection.community.comment.dto.CommentCreateRequest; +import com.example.solidconnection.community.comment.dto.CommentCreateResponse; +import com.example.solidconnection.community.comment.dto.CommentDeleteResponse; +import com.example.solidconnection.community.comment.dto.CommentUpdateRequest; +import com.example.solidconnection.community.comment.dto.CommentUpdateResponse; +import com.example.solidconnection.community.comment.dto.PostFindCommentResponse; +import com.example.solidconnection.community.comment.repository.CommentRepository; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.support.integration.BaseIntegrationTest; import com.example.solidconnection.type.PostCategory; diff --git a/src/test/java/com/example/solidconnection/post/service/PostCommandServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java similarity index 94% rename from src/test/java/com/example/solidconnection/post/service/PostCommandServiceTest.java rename to src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java index 3cdc5a40c..a8052a89c 100644 --- a/src/test/java/com/example/solidconnection/post/service/PostCommandServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java @@ -1,16 +1,16 @@ -package com.example.solidconnection.post.service; +package com.example.solidconnection.community.post.service; -import com.example.solidconnection.board.domain.Board; +import com.example.solidconnection.community.board.domain.Board; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.entity.PostImage; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.PostCreateRequest; -import com.example.solidconnection.post.dto.PostCreateResponse; -import com.example.solidconnection.post.dto.PostDeleteResponse; -import com.example.solidconnection.post.dto.PostUpdateRequest; -import com.example.solidconnection.post.dto.PostUpdateResponse; -import com.example.solidconnection.post.repository.PostRepository; -import com.example.solidconnection.repositories.PostImageRepository; +import com.example.solidconnection.community.post.domain.PostImage; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.dto.PostCreateRequest; +import com.example.solidconnection.community.post.dto.PostCreateResponse; +import com.example.solidconnection.community.post.dto.PostDeleteResponse; +import com.example.solidconnection.community.post.dto.PostUpdateRequest; +import com.example.solidconnection.community.post.dto.PostUpdateResponse; +import com.example.solidconnection.community.post.repository.PostRepository; +import com.example.solidconnection.community.post.repository.PostImageRepository; import com.example.solidconnection.s3.S3Service; import com.example.solidconnection.s3.UploadedFileUrlResponse; import com.example.solidconnection.service.RedisService; diff --git a/src/test/java/com/example/solidconnection/post/service/PostLikeServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java similarity index 91% rename from src/test/java/com/example/solidconnection/post/service/PostLikeServiceTest.java rename to src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java index 460b9a15b..1b1e1d2fd 100644 --- a/src/test/java/com/example/solidconnection/post/service/PostLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java @@ -1,12 +1,12 @@ -package com.example.solidconnection.post.service; +package com.example.solidconnection.community.post.service; -import com.example.solidconnection.board.domain.Board; +import com.example.solidconnection.community.board.domain.Board; import com.example.solidconnection.custom.exception.CustomException; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.PostDislikeResponse; -import com.example.solidconnection.post.dto.PostLikeResponse; -import com.example.solidconnection.post.repository.PostLikeRepository; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.dto.PostDislikeResponse; +import com.example.solidconnection.community.post.dto.PostLikeResponse; +import com.example.solidconnection.community.post.repository.PostLikeRepository; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.support.integration.BaseIntegrationTest; import com.example.solidconnection.type.PostCategory; diff --git a/src/test/java/com/example/solidconnection/post/service/PostQueryServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java similarity index 60% rename from src/test/java/com/example/solidconnection/post/service/PostQueryServiceTest.java rename to src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java index d9acf5845..33246e981 100644 --- a/src/test/java/com/example/solidconnection/post/service/PostQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java @@ -1,24 +1,27 @@ -package com.example.solidconnection.post.service; - -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.comment.domain.Comment; -import com.example.solidconnection.comment.dto.PostFindCommentResponse; -import com.example.solidconnection.comment.repository.CommentRepository; -import com.example.solidconnection.entity.PostImage; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.dto.PostFindPostImageResponse; -import com.example.solidconnection.post.dto.PostFindResponse; -import com.example.solidconnection.post.repository.PostRepository; -import com.example.solidconnection.repositories.PostImageRepository; +package com.example.solidconnection.community.post.service; + +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.comment.domain.Comment; +import com.example.solidconnection.community.comment.dto.PostFindCommentResponse; +import com.example.solidconnection.community.post.dto.PostListResponse; +import com.example.solidconnection.community.comment.repository.CommentRepository; +import com.example.solidconnection.community.post.domain.PostImage; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.dto.PostFindPostImageResponse; +import com.example.solidconnection.community.post.dto.PostFindResponse; +import com.example.solidconnection.community.post.repository.PostRepository; +import com.example.solidconnection.community.post.repository.PostImageRepository; import com.example.solidconnection.service.RedisService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.support.integration.BaseIntegrationTest; +import com.example.solidconnection.type.BoardCode; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.util.RedisUtils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.time.ZonedDateTime; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -45,6 +48,56 @@ class PostQueryServiceTest extends BaseIntegrationTest { @Autowired private PostImageRepository postImageRepository; + @Test + void 게시판_코드와_카테고리로_게시글_목록을_조회한다() { + // given + List posts = List.of( + 미주권_자유게시글, 아시아권_자유게시글, 유럽권_자유게시글, 자유게시판_자유게시글, + 미주권_질문게시글, 아시아권_질문게시글, 유럽권_질문게시글, 자유게시판_질문게시글 + ); + List expectedPosts = posts.stream() + .filter(post -> post.getCategory().equals(PostCategory.자유) && post.getBoard().getCode().equals(BoardCode.FREE.name())) + .toList(); + List expectedResponses = PostListResponse.from(expectedPosts); + + // when + List actualResponses = postQueryService.findPostsByCodeAndPostCategory( + BoardCode.FREE.name(), + PostCategory.자유.name() + ); + + // then + assertThat(actualResponses) + .usingRecursiveComparison() + .ignoringFieldsOfTypes(ZonedDateTime.class) + .isEqualTo(expectedResponses); + } + + @Test + void 전체_카테고리로_조회시_해당_게시판의_모든_게시글을_조회한다() { + // given + List posts = List.of( + 미주권_자유게시글, 아시아권_자유게시글, 유럽권_자유게시글, 자유게시판_자유게시글, + 미주권_질문게시글, 아시아권_질문게시글, 유럽권_질문게시글, 자유게시판_질문게시글 + ); + List expectedPosts = posts.stream() + .filter(post -> post.getBoard().getCode().equals(BoardCode.FREE.name())) + .toList(); + List expectedResponses = PostListResponse.from(expectedPosts); + + // when + List actualResponses = postQueryService.findPostsByCodeAndPostCategory( + BoardCode.FREE.name(), + PostCategory.전체.name() + ); + + // then + assertThat(actualResponses) + .usingRecursiveComparison() + .ignoringFieldsOfTypes(ZonedDateTime.class) + .isEqualTo(expectedResponses); + } + @Test void 게시글을_성공적으로_조회한다() { // given diff --git a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java index 544b31b4c..3903f31ff 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java @@ -1,10 +1,10 @@ package com.example.solidconnection.concurrency; -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.board.repository.BoardRepository; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.repository.PostRepository; -import com.example.solidconnection.post.service.PostLikeService; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.board.repository.BoardRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.repository.PostRepository; +import com.example.solidconnection.community.post.service.PostLikeService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; diff --git a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java index 678e2b084..2cb6eaa27 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java @@ -1,9 +1,9 @@ package com.example.solidconnection.concurrency; -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.board.repository.BoardRepository; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.board.repository.BoardRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.service.RedisService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; diff --git a/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java b/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java index ec29b8499..483c5d133 100644 --- a/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java +++ b/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java @@ -4,15 +4,15 @@ import com.example.solidconnection.application.domain.Gpa; import com.example.solidconnection.application.domain.LanguageTest; import com.example.solidconnection.application.repository.ApplicationRepository; -import com.example.solidconnection.board.domain.Board; -import com.example.solidconnection.board.repository.BoardRepository; +import com.example.solidconnection.community.board.domain.Board; +import com.example.solidconnection.community.board.repository.BoardRepository; import com.example.solidconnection.entity.Country; -import com.example.solidconnection.entity.PostImage; +import com.example.solidconnection.community.post.domain.PostImage; import com.example.solidconnection.entity.Region; -import com.example.solidconnection.post.domain.Post; -import com.example.solidconnection.post.repository.PostRepository; +import com.example.solidconnection.community.post.domain.Post; +import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.repositories.CountryRepository; -import com.example.solidconnection.repositories.PostImageRepository; +import com.example.solidconnection.community.post.repository.PostImageRepository; import com.example.solidconnection.repositories.RegionRepository; import com.example.solidconnection.score.domain.GpaScore; import com.example.solidconnection.score.domain.LanguageTestScore;