이번에는 3단계를 마루리 작업했다.
- 3단계 : 일정 페이징 조회
🔻 조건
- 일정을 Spring Data JPA의 Pageable과 Page 인터페이스를 활용하여 페이지네이션을 구현해주세요.
- 페이지 번호와 페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다.
- 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명 필드를 조회합니다.
- 디폴트 페이지 크기는 10으로 적용합니다.
- 일정의 수정일을 기준으로 내림차순 정렬합니다.
그러면 Todo에서 3 Layer Architecture를 수정해야 한다.
일정을 전체 조회하려면 쿼리 파라미터로 받아 List 형태로 받는 메서드를 생성했다.
@GetMapping("/todo")
public List<TodoResponseDto> getAllTodoPaging (
@RequestParam(defaultValue = "0") Integer pageNumber,
@RequestParam(defaultValue = "10") Integer pageCount) {
return todoService.getAllTodoPaging(pageNumber, pageCount);
}
Pageable 인터페이스를 사용하여 페이징 및 정렬
public interface TodoRepository extends JpaRepository<Todo, Long> {
Page<Todo> findAll(Pageable pageable);
List<Todo> findAllByOrderByModifiedAtDesc();
}
pageNumber와 pageCount을 기반으로 Todo 목록을 페이징하여 조회
public List<TodoResponseDto> getAllTodoPaging(Integer pageNumber, Integer pageCount) {
Pageable pageable = PageRequest.of(pageNumber, pageCount, Sort.by(Sort.Direction.DESC, "modifiedAt"));
Page<Todo> todo = todoRepository.findAll(pageable);
return todo.stream().map(TodoResponseDto::new).collect(Collectors.toList());
}
잘 실행이 되서 이렇게 된거 4단계도 도전했다.
- 4단계 : 일정 삭제
🔻 조건
- 일정을 삭제할 때 일정의 댓글도 함께 삭제됩니다.
- JPA의 영속성 전이 기능을 활용합니다.
그러면 Todo 엔티티와 controller, service도 수정하거나 추가해야한다.
cascade = CascadeType.REMOVE를 추가해서 일정을 삭제시 일정과 연관된 댓글들도 삭제
@OneToMany(mappedBy = "todo", cascade = CascadeType.REMOVE)
private List<Comment> comments;
일정을 삭제할 delete 메서드 추가
@DeleteMapping("/todo/{id}")
public ResponseEntity<Void> deleteTodo(@PathVariable Long id) {
todoService.deleteTodo(id);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
일정을 삭제할 로직을 구현
public void deleteTodo(Long id) {
// 해당하는 일정이 있는지 확인
Todo todo = findTodo(id);
todoRepository.delete(todo);
}
잘 실행된다.!