From 4806dd3031e8f104ccb8b0f3e7d65d75fbf50b5e Mon Sep 17 00:00:00 2001 From: RyuKwanKon Date: Sun, 7 Jan 2024 17:14:29 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[refactor]=20#29=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20api=20=EC=B6=95=EC=95=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/controller/PostController.java | 16 ++---------- .../domain/post/service/PostService.java | 25 +++++-------------- 2 files changed, 8 insertions(+), 33 deletions(-) diff --git a/src/main/java/org/gachon/checkmate/domain/post/controller/PostController.java b/src/main/java/org/gachon/checkmate/domain/post/controller/PostController.java index 931fc93..ff131fa 100644 --- a/src/main/java/org/gachon/checkmate/domain/post/controller/PostController.java +++ b/src/main/java/org/gachon/checkmate/domain/post/controller/PostController.java @@ -5,14 +5,11 @@ import org.gachon.checkmate.domain.post.dto.request.PostCreateRequestDto; import org.gachon.checkmate.domain.post.dto.response.PostDetailResponseDto; import org.gachon.checkmate.domain.post.dto.response.PostSearchResponseDto; -import org.gachon.checkmate.domain.post.dto.support.PostSearchCondition; -import org.gachon.checkmate.domain.post.repository.PostQuerydslRepository; import org.gachon.checkmate.domain.post.service.PostService; import org.gachon.checkmate.global.common.SuccessResponse; import org.gachon.checkmate.global.config.auth.UserId; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; -import org.springframework.lang.Nullable; import org.springframework.web.bind.annotation.*; @RequiredArgsConstructor @@ -23,10 +20,11 @@ public class PostController { @GetMapping public ResponseEntity> getAllPosts(@UserId final Long userId, + @RequestParam(required = false) final String key, @RequestParam final String type, @RequestParam(required = false) final String gender, final Pageable pageable) { - final PostSearchResponseDto responseDto = postService.getAllPosts(userId, type, gender, pageable); + final PostSearchResponseDto responseDto = postService.getAllPosts(userId, key, type, gender, pageable); return SuccessResponse.ok(responseDto); } @@ -44,16 +42,6 @@ public ResponseEntity> searchTextPost(@UserId final Long user return SuccessResponse.ok(responseDto); } - @GetMapping("/search/{key}") - public ResponseEntity> searchKeyWordPost(@UserId final Long userId, - @PathVariable final String key, - @RequestParam final String type, - @RequestParam(required = false) final String gender, - final Pageable pageable) { - final PostSearchResponseDto responseDto = postService.searchKeyWordPost(userId, key, type, gender, pageable); - return SuccessResponse.ok(responseDto); - } - @PostMapping public ResponseEntity> createPost(@UserId final Long userId, @RequestBody @Valid final PostCreateRequestDto requestDto) { diff --git a/src/main/java/org/gachon/checkmate/domain/post/service/PostService.java b/src/main/java/org/gachon/checkmate/domain/post/service/PostService.java index 9d69291..15f8263 100644 --- a/src/main/java/org/gachon/checkmate/domain/post/service/PostService.java +++ b/src/main/java/org/gachon/checkmate/domain/post/service/PostService.java @@ -18,7 +18,6 @@ import org.gachon.checkmate.domain.post.dto.support.PostSearchDto; import org.gachon.checkmate.domain.post.entity.Post; import org.gachon.checkmate.domain.post.entity.SortType; -import org.gachon.checkmate.domain.post.repository.PostQuerydslRepository; import org.gachon.checkmate.domain.post.repository.PostRepository; import org.gachon.checkmate.global.error.exception.EntityNotFoundException; import org.gachon.checkmate.global.error.exception.InvalidValueException; @@ -44,19 +43,18 @@ public class PostService { private final UserRepository userRepository; private final CheckListRepository checkListRepository; private final PostRepository postRepository; - private final PostQuerydslRepository postQuerydslRepository; private final PostCheckListRepository postCheckListRepository; public void createPost(Long userId, PostCreateRequestDto requestDto) { validateDuplicateTitle(requestDto.title()); User user = getUserOrThrow(userId); Post post = createPostAndSave(requestDto, user); - PostCheckList postCheckList = createPostCheckListAndSave(requestDto.checkList(), post); + createPostCheckListAndSave(requestDto.checkList(), post); } - public PostSearchResponseDto getAllPosts(Long userId, String type, String gender, Pageable pageable) { + public PostSearchResponseDto getAllPosts(Long userId, String key, String type, String gender, Pageable pageable) { CheckList checkList = getCheckList(userId); - PostSearchCondition condition = PostSearchCondition.of(type, null, gender, pageable); + PostSearchCondition condition = PostSearchCondition.of(type, key, gender, pageable); Page postSearchList = getSearchResults(condition); List searchResults = createPostSearchResponseDto(postSearchList, checkList); sortByTypeForSearchResults(searchResults, condition.sortType()); @@ -71,17 +69,6 @@ public PostDetailResponseDto getPostDetails(Long postId) { return PostDetailResponseDto.of(postDetailDto, checkListResponseDto); } - public PostSearchResponseDto searchKeyWordPost(Long userId, String key, String type, String gender, Pageable pageable) { - CheckList checkList = getCheckList(userId); - PostSearchCondition condition = PostSearchCondition.of(type, key, gender, pageable); - Page postSearchList = getSearchResults(condition); - List searchResults = createPostSearchResponseDto(postSearchList, checkList); - sortByTypeForSearchResults(searchResults, condition.sortType()); - List pagingSearchResults - = convertPaging(searchResults, pageable.getOffset(), pageable.getPageSize()); - return PostSearchResponseDto.of(pagingSearchResults, postSearchList.getTotalPages(), postSearchList.getTotalElements()); - } - public PostSearchResponseDto searchTextPost(Long userId, String text, Pageable pageable) { CheckList checkList = getCheckList(userId); Page postSearchList = getTextSearchResults(text, pageable); @@ -162,11 +149,11 @@ private PostCheckList createPostCheckListAndSave(CheckListRequestDto checkListRe } private Page getSearchResults(PostSearchCondition condition) { - return postQuerydslRepository.searchPosts(condition); + return postRepository.searchPosts(condition); } private Page getTextSearchResults(String text, Pageable pageable) { - return postQuerydslRepository.searchTextPost(text, pageable); + return postRepository.searchTextPost(text, pageable); } private CheckList getCheckList(Long userId) { @@ -175,7 +162,7 @@ private CheckList getCheckList(Long userId) { } private PostDetailDto getPostDetailDto(Long postId) { - return postQuerydslRepository.findPostDetail(postId) + return postRepository.findPostDetail(postId) .orElseThrow(() -> new EntityNotFoundException(POST_NOT_FOUND)); } From 9a06f3d03b719345e42a137bb7cfa3a269858d71 Mon Sep 17 00:00:00 2001 From: RyuKwanKon Date: Sun, 7 Jan 2024 17:27:51 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[refactor]=20#29=20post=20querydsl=20?= =?UTF-8?q?=EC=B6=94=EC=83=81=ED=99=94=EB=A1=9C=20service=EC=99=80=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B5=9C=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/repository/PostCustomRepository.java | 15 +++++++++++++++ ...ository.java => PostCustomRepositoryImpl.java} | 7 ++++--- .../domain/post/repository/PostRepository.java | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepository.java rename src/main/java/org/gachon/checkmate/domain/post/repository/{PostQuerydslRepository.java => PostCustomRepositoryImpl.java} (97%) diff --git a/src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepository.java b/src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepository.java new file mode 100644 index 0000000..3db1f83 --- /dev/null +++ b/src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepository.java @@ -0,0 +1,15 @@ +package org.gachon.checkmate.domain.post.repository; + +import org.gachon.checkmate.domain.post.dto.support.PostDetailDto; +import org.gachon.checkmate.domain.post.dto.support.PostSearchCondition; +import org.gachon.checkmate.domain.post.dto.support.PostSearchDto; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.Optional; + +public interface PostCustomRepository { + Optional findPostDetail(Long postId); + Page searchPosts(PostSearchCondition condition); + Page searchTextPost(String text, Pageable pageable); +} diff --git a/src/main/java/org/gachon/checkmate/domain/post/repository/PostQuerydslRepository.java b/src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepositoryImpl.java similarity index 97% rename from src/main/java/org/gachon/checkmate/domain/post/repository/PostQuerydslRepository.java rename to src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepositoryImpl.java index 28b7ecf..1fa1e3d 100644 --- a/src/main/java/org/gachon/checkmate/domain/post/repository/PostQuerydslRepository.java +++ b/src/main/java/org/gachon/checkmate/domain/post/repository/PostCustomRepositoryImpl.java @@ -11,7 +11,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.stereotype.Repository; import java.time.LocalDate; import java.util.List; @@ -23,10 +22,10 @@ import static org.springframework.util.StringUtils.hasText; @RequiredArgsConstructor -@Repository -public class PostQuerydslRepository { +public class PostCustomRepositoryImpl implements PostCustomRepository { private final JPAQueryFactory queryFactory; + @Override public Optional findPostDetail(Long postId) { return Optional.ofNullable(queryFactory .select(new QPostDetailDto( @@ -46,6 +45,7 @@ public Optional findPostDetail(Long postId) { .fetchOne()); } + @Override public Page searchPosts(PostSearchCondition condition) { List content = queryFactory .select(new QPostSearchDto( @@ -74,6 +74,7 @@ public Page searchPosts(PostSearchCondition condition) { return PageableExecutionUtils.getPage(content, condition.pageable(), countQuery::fetchCount); } + @Override public Page searchTextPost(String text, Pageable pageable) { List content = queryFactory .select(new QPostSearchDto( diff --git a/src/main/java/org/gachon/checkmate/domain/post/repository/PostRepository.java b/src/main/java/org/gachon/checkmate/domain/post/repository/PostRepository.java index 6441740..bc4d448 100644 --- a/src/main/java/org/gachon/checkmate/domain/post/repository/PostRepository.java +++ b/src/main/java/org/gachon/checkmate/domain/post/repository/PostRepository.java @@ -5,6 +5,6 @@ import java.util.Optional; -public interface PostRepository extends JpaRepository { +public interface PostRepository extends JpaRepository, PostCustomRepository { boolean existsByTitle(String title); }