내가 쓴 글 리스트를 보여주는 마이피드 기능을 구현했다.
- 내가 작성한 글만 보이는 기능
- 제목, 글쓴이, 내용, 작성날짜가 표시
- 목록 기능은 페이징 기능이 포함 (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 전체 리스트 불러오는 것과 거의 동일한 로직이다.
'프로젝트 > 멋사 개인 프로젝트 (mutsa-SNS)' 카테고리의 다른 글
[23] mutsa-SNS-2 5일차 - 알람 기능 추가 (0) | 2023.01.10 |
---|---|
[22] mutsa-SNS-2 4일차 - 마이 피드 기능 test code (0) | 2023.01.09 |
[20] mutsa-SNS-2 3일차 - (1) soft delete 관련 리펙토링 (@Transactional 이슈) (0) | 2023.01.05 |
[19] mutsa-SNS-2 2일차 - (2) 좋아요 기능 test code (0) | 2023.01.04 |
[18] mutsa-SNS-2 2일차 - (1) 좋아요 기능 구현 (soft delete 복구) (0) | 2023.01.04 |