[인스타그램 클론코딩] 13. 게시글 검색 기능 구현(Back-End)

2023. 2. 16. 15:33·Web/인스타 클론 코딩

검색 기능은 간단하다. querydsl의 contain기능을 사용하여 리스트를 뽑아낸다.

 

1. PostRepositorySupport 수정

public List<Post> getPosts(String query) {
    return queryFactory.selectFrom(post).where(post.content.contains(query)).orderBy(post.modifiedDate.desc()).fetch();
}

 

- post 테이블에서 content 내용 중 query를 포함하는 게시글들의 목록을 반환한다.

 

2. PostService, Controller 수정

@GetMapping("/posts/search")
public ResponseEntity getSearchPostList(@CurrentUser User user, @RequestParam(value = "query") String query) {
    try {
        return ResponseEntity.ok().body(postService.getSearchPostList(user, query));
    } catch (Exception e) {
        return ResponseEntity.badRequest().body(e.getMessage());
    }
}

@Transactional
public PostResponseDto getSearchPostList(User user, String query) {
    List<Post> postList = postRepositorySupport.getPosts(query);
    List<PostDto> postDtoList = new ArrayList<>();

    postList.forEach((post -> {
        List<PostFile> postFileList = postFileRepository.findAllByPost(post);
        List<PostFileDto> postFileDtoList = new ArrayList<>();

        // PostFileDto로 변환
        postFileList.forEach((postFile) -> {
            postFileDtoList.add(PostFileDto.toDto(postFile));
        });

        // PostDtoList에 내용 삽입
        postDtoList.add(
                PostDto.builder()
                        .postFileList(postFileDtoList)
                        .postId(post.getId())
                        .content(post.getContent())
                        .user(UserDto.toDto(post.getUser()))
                        .like(postLikeRepository.existsByPostAndUser(post, user))
                        .countLike(postLikeRepository.countByPost(post))
                        .countChat(postChatRepository.countByPost(post))
                        .build());
    }));

    return PostResponseDto.builder().postList(postDtoList).build();
}
저작자표시 비영리 변경금지 (새창열림)

'Web > 인스타 클론 코딩' 카테고리의 다른 글

[인스타그램 클론코딩] 14. 마무리하며...  (0) 2023.02.16
[인스타그램 클론코딩] 13. 게시글 검색 기능 구현(Front-End)  (0) 2023.02.16
[인스타그램 클론코딩] 12. 메신저 기능 구현(Front-End)  (0) 2023.02.16
[인스타그램 클론코딩] 12. 메신저 기능 구현(Back-End)  (0) 2023.02.16
[인스타그램 클론코딩] 11. 프로필 수정 기능 구현(Front-End)  (0) 2023.02.07
'Web/인스타 클론 코딩' 카테고리의 다른 글
  • [인스타그램 클론코딩] 14. 마무리하며...
  • [인스타그램 클론코딩] 13. 게시글 검색 기능 구현(Front-End)
  • [인스타그램 클론코딩] 12. 메신저 기능 구현(Front-End)
  • [인스타그램 클론코딩] 12. 메신저 기능 구현(Back-End)
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    백준
    클론코딩
    티스토리챌린지
    MSA
    리액트
    클러스터
    스프링부트
    오블완
    쿠버네티스
    Entity
    예외
    mapstruct
    REST API
    chat GPT
    react
    스프링 부트
    Java
    인스타그램
    spring boot
    OpenAI API
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
[인스타그램 클론코딩] 13. 게시글 검색 기능 구현(Back-End)
상단으로

티스토리툴바