728x90
이전글
체크사항
- 리스트
- 회원, 비회원 모두 볼 수 있다.
- 제목, 글쓴이, 마지막 수정날짜가 표시된다.
- 포스트를 클릭하면 포스트의 상세 내역을 볼 수 있다.
- 목록 기능은 페이징 기능이 포함된다. (Pageable 사용)
- 한 페이지당 default 피드 개수는 20개이다.
- 총 페이지 갯수가 표시된다.
- 작성날짜 기준으로 최신순으로 Sort 한다. DtoPostReadResponse를 그대로 사용합니다.
Controller
@RequestMapping("/api/v1/posts")
@RestController
@RequiredArgsConstructor
@Slf4j
public class PostController {
private final PostService postService;
@GetMapping
public Response<Page<PostReadResponse>> getPostList(){
PageRequest pageable = PageRequest.of(0, 20, Sort.by("id").descending());
List<PostReadResponse> post = postService.getAllPost(pageable);
return Response.success(new PageImpl<>(post));
}
}
Page<PostReadResponse>를 Response로 감싸 반환합니다.
PageRequest를 사용하여 paging 조건들을 입력합니다. 0번째 페이지, 한 페이지당 20개의 데이터, "id"를 기준으로 내림차순을 지정합니다.
Pageable 클래스를 사용해도 되지만, 요구사항의 반환 리스트 양식을 보면 Pageable이 아닌, new PageImpl<>()로 반환할 때 나올 수 있는 반환 값이므로 PageRequest를 사용합니다. PageRequest는 Pageable과 Serializable을 implements 하는 AbstractPageRequest를 상속하는 클래스입니다.
받아온 Post정보를 List에 저장한후 new PageImpl<>에 post를 넣어 반환합니다.
Service
@Service
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final UserRepository userRepository;
public List<PostReadResponse> getAllPost(PageRequest pageRequest) {
Page<Post> posts = postRepository.findAll(pageRequest);
List<PostReadResponse> postReadResponses = posts.stream()
.map(Post::toResponse)
.collect(Collectors.toList());
return postReadResponses;
}
}
pageRequest를 사용하여 post의 모든 정보를 받아옵니다.
받아온 데이터들을 토대로 Stream을 사용해서 정보들을 하나씩 Response화 시키고 List에 저장한 후 컨트롤러로 반환합니다.
Entity
...
public class Post extends BaseEntity {
...
public PostReadResponse toResponse() {
return PostReadResponse.builder()
.id(this.getId())
.title(this.getTitle())
.body(this.getBody())
.userName(this.getUser().getUserName())
.createdAt(this.getCreatedAt())
.lastModifiedAt(this.getLastModifiedAt())
.build();
}
}
Entity인 Post정보를 사용자가 원하는 PostReadResponse형식으로 변경하기 위해 toResponse() 메서드를 새롭게 생성합니다.
결과
다음글
반응형
'프로젝트 > Archive' 카테고리의 다른 글
[03] 게시된 포스트 삭제 (0) | 2022.12.23 |
---|---|
[03] 게시된 포스트 수정 (0) | 2022.12.23 |
[03] 포스트 단건 상세 정보 보기 만들기 (0) | 2022.12.23 |
[03] 포스트 등록 만들기 (0) | 2022.12.23 |
[03] 포스트 기능 만들기 준비 (0) | 2022.12.23 |