Skip to content

Commit

Permalink
Merge pull request #171 from Codiary-UMC-6th/feature/#170-serach
Browse files Browse the repository at this point in the history
Feat: ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Loading branch information
melitina915 authored Aug 13, 2024
2 parents 0eca802 + d40eaac commit 6665b17
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
// Post ๊ด€๋ จ ์ ‘๊ทผ
.requestMatchers("/posts","/posts/{postId}", "/posts/visibility/{postId}", "/posts/coauthors/{postId}", "/posts/categories/{postId}").permitAll()
.requestMatchers("/posts/title/paging", "/posts/team/{teamId}/{postId}", "/posts/team/{teamId}/member/{memberId}/paging", "/posts/project/{projectId}/team/{teamId}/paging", "/posts/project/{projectId}/member/{memberId}/paging", "/posts/member/{memberId}/paging", "/posts/categories/paging", "/posts/{postId}/adjacent").permitAll()
.requestMatchers("/posts/poplular/list", "/posts/latest/list", "/posts/comments/list/{postId}").permitAll()
.requestMatchers("/posts/poplular/list", "/posts/latest/list", "/posts/comments/list/{postId}", "/posts/search/title/body/member/project/categories").permitAll()
.requestMatchers("/categories/list", "/projects/list").permitAll()
// Comment ๊ด€๋ จ ์ ‘๊ทผ
.requestMatchers("/comments/count/{postId}").permitAll()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -580,4 +580,33 @@ public static PostResponseDTO.PostFollowingListDTO toPostFollowingListDTO(Page<P
.build();
}

// ์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰
public static PostResponseDTO.PostSearchTitleDTO toPostSearchTitleDTO(Post post) {
return PostResponseDTO.PostSearchTitleDTO.builder()
.postId(post.getPostId())
.memberId(post.getMember().getMemberId())
.fileUrl((post.getThumbnailImage() != null)
? post.getThumbnailImage().getFileUrl()
: "")
.postTitle(post.getPostTitle())
.nickname(post.getMember().getNickname())
.postBody(post.getPostBody())
.createdAt(post.getCreatedAt())
.build();
}

public static PostResponseDTO.PostSearchTitleListDTO toPostSearchTitleListDTO(Page<Post> postSearchTitleList) {
List<PostResponseDTO.PostSearchTitleDTO> postSearchTitleDTOList = postSearchTitleList.stream()
.map(PostConverter::toPostSearchTitleDTO).collect(Collectors.toList());

return PostResponseDTO.PostSearchTitleListDTO.builder()
.isLast(postSearchTitleList.isLast())
.isFirst(postSearchTitleList.isFirst())
.totalPage(postSearchTitleList.getTotalPages())
.totalElements(postSearchTitleList.getTotalElements())
.listSize(postSearchTitleDTOList.size())
.postSearchTitleList(postSearchTitleDTOList)
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,17 @@ public interface PostRepository extends JpaRepository<Post, Long> {
// ๋ฉ”์ธํŽ˜์ด์ง€ ํŒ”๋กœ์ž‰ ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
Page<Post> findAllByMemberOrderByCreatedAtDesc(Member toMember, Pageable pageable);

// ์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰
// Page<Post> findAllByPostTitleContainingOrPostBodyContainingOrMemberContainingOrProjectContainingOrCategoriesListContaining(String keywordTitle, String keywordBody, String keywordMember, String keywordProject, String keywordCategories, Pageable pageable);
@Query("SELECT DISTINCT p FROM Post p " +
"JOIN p.member m " +
"LEFT JOIN p.project proj " +
"LEFT JOIN p.categoriesList c " +
"WHERE p.postTitle LIKE %:keyword% " +
"OR p.postBody LIKE %:keyword% " +
"OR m.nickname LIKE %:keyword% " +
"OR proj.projectName LIKE %:keyword% " +
"OR c.name LIKE %:keyword%")
Page<Post> searchPosts(@Param("keyword") String keyword, Pageable pageable);

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,7 @@ public interface PostQueryService {
Page<Post> getPostLatestList(Integer page);
// ๋ฉ”์ธํŽ˜์ด์ง€ ํŒ”๋กœ์ž‰ ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
Page<Post> getPostFollowingList(Long followId, Integer page);
// ์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰
Page<Post> getPostSearchTitleList(Optional<String> keyword, Integer page);

}
Original file line number Diff line number Diff line change
Expand Up @@ -236,4 +236,27 @@ public Page<Post> getPostFollowingList(Long followId, Integer page) {

}

// ์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰
@Override
public Page<Post> getPostSearchTitleList(Optional<String> keyword, Integer page) {

if(keyword.isPresent()) {
String result = keyword.get();

// Page<Post> postSearchTitleResult = postRepository.findAllByPostTitleContainingOrPostBodyContainingOrMemberContainingOrProjectContainingOrCategoriesListContaining(result, result, result, result, result, PageRequest.of(page - 1, 9));
Page<Post> postSearchTitleResult = postRepository.searchPosts(result, PageRequest.of(page - 1, 9));

PostConverter.toPostSearchTitleListDTO(postSearchTitleResult);

return postSearchTitleResult;
}

Page<Post> postSearchTitleResult = postRepository.findAllByOrderByCreatedAtDesc(PageRequest.of(page - 1, 9));

PostConverter.toPostSearchTitleListDTO(postSearchTitleResult);

return postSearchTitleResult;

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -406,4 +406,30 @@ public ApiResponse<PostResponseDTO.PostFollowingListDTO> getPostFollowingList(

}

// ์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰
@GetMapping("/search/title/body/member/project/categories")
@Operation(
summary = "์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰ ์กฐํšŒ API",
description = "posts"
)
@ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST3000", description = "OK, ์„ฑ๊ณต"),
// @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "AUTH003", description = "access ํ† ํฐ์„ ์ฃผ์„ธ์š”!", content = @Content(schema = @Schema(implementation = ApiResponse.class))),
// @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "AUTH004", description = "access ํ† ํฐ ๋งŒ๋ฃŒ", content = @Content(schema = @Schema(implementation = ApiResponse.class))),
// @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "AUTH006", description = "access ํ† ํฐ ๋ชจ์–‘์ด ์ด์ƒํ•จ", content = @Content(schema = @Schema(implementation = ApiResponse.class)))
})
@Parameters({
@Parameter(name = "page", description = "ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ, 1๋ฒˆ์ด 1 ํŽ˜์ด์ง€ ์ž…๋‹ˆ๋‹ค.")
})
public ApiResponse<PostResponseDTO.PostSearchTitleListDTO> getPostSearchTitle(
@RequestParam(name = "keyword") Optional<String> keyword,
@RequestParam(name = "page") Integer page
) {

Page<Post> postSearchTitleList = postQueryService.getPostSearchTitleList(keyword, page);

return ApiResponse.onSuccess(SuccessStatus.POST_OK, PostConverter.toPostSearchTitleListDTO(postSearchTitleList));

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -470,5 +470,33 @@ public static class PostFollowingDTO {
LocalDateTime createdAt;
}

// ์ œ๋ชฉ & ๋ณธ๋ฌธ & ์ €์ž & ํ”„๋กœ์ ํŠธ & ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class PostSearchTitleListDTO {
List<PostResponseDTO.PostSearchTitleDTO> postSearchTitleList;
Integer listSize;
Integer totalPage;
Long totalElements;
Boolean isFirst;
Boolean isLast;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class PostSearchTitleDTO {
Long postId;
Long memberId;
String fileUrl;
String postTitle;
String nickname;
String postBody;
LocalDateTime createdAt;
}

}

0 comments on commit 6665b17

Please sign in to comment.