본문 바로가기

프로젝트/멋사 개인 프로젝트 (mutsa-SNS)

[21] mutsa-SNS-2 3일차 - (2) 마이 피드 기능 구현

내가 쓴 글 리스트를 보여주는 마이피드 기능을 구현했다.

  • 내가 작성한 글만 보이는 기능
  • 제목, 글쓴이, 내용, 작성날짜가 표시
  • 목록 기능은 페이징 기능이 포함 (Post 조회와 동일)

 

단지 Post 전체 조회와 다른 것이 user로 post를 검색하는 로직 추가 밖에 없어 간단히 구현했다.

 

1. Repository

PostRepository

public interface PostRepository extends JpaRepository<Post, Integer> {
    Page<Post> findAllByUser(User user, Pageable pageable);
}

해당 User로 post를 검색하여 page에 담아 return하는 method를 추가했다.

 

2. Service

PostService

@Service
@RequiredArgsConstructor
@Slf4j
public class PostService {

    private final PostRepository postRepository;
    private final UserRepository userRepository;
    private final CommentRepository commentRepository;
    private final LikeRepository likeRepository;
    
	...
    
    public Page<PostDto> getMyFeed(Pageable pageable, String userName) {

        User user = userRepository.findByUserName(userName)
                .orElseThrow(() -> new AppException(ErrorCode.NOT_FOUNDED_USER_NAME, ""));

        Page<Post> postPages = postRepository.findAllByUser(user, pageable);

        return new PageImpl<>(postPages.stream()
                .map(Post::toResponse)
                .collect(Collectors.toList()));

    }

}

post 전체 리스트 불러오는 것과 거의 동일한 로직이다.

 

3. Controller

PostController

@RestController
@RequestMapping("/api/v1/posts")
@RequiredArgsConstructor
public class PostController {

    private final PostService postService;
    
    ...
    
    @GetMapping("/my")
    public Response<Page<PostDto>> getMyFeed(@PageableDefault(size=20, sort="createdAt", direction = Sort.Direction.DESC) Pageable pageable,
                                             @ApiIgnore Authentication authentication) {
        Page<PostDto> postDtos = postService.getMyFeed(pageable, authentication.getName());
        return Response.success(postDtos);
    }
}

이 역시 post 전체 리스트 불러오는 것과 거의 동일한 로직이다.