24.08.23

윤지현·2024년 8월 23일

TIL

목록 보기
48/75

오늘의 루틴

  • 개인과제 3단계 완료 및 4~5단계 시도 (O)
  • 강의 최소 4개는 듣기 (O)
  • 공부한 내용 복습 (O)

이번에는 3단계를 마루리 작업했다.

  • 3단계 : 일정 페이징 조회

🔻 조건

  • 일정을 Spring Data JPA의 Pageable과 Page 인터페이스를 활용하여 페이지네이션을 구현해주세요.
    • 페이지 번호와 페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다.
    • 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명 필드를 조회합니다.
    • 디폴트 페이지 크기는 10으로 적용합니다.
  • 일정의 수정일을 기준으로 내림차순 정렬합니다.

그러면 Todo에서 3 Layer Architecture를 수정해야 한다.


1. TodoController.java

일정을 전체 조회하려면 쿼리 파라미터로 받아 List 형태로 받는 메서드를 생성했다.

    @GetMapping("/todo")
    public List<TodoResponseDto> getAllTodoPaging (
            @RequestParam(defaultValue = "0") Integer pageNumber,
            @RequestParam(defaultValue = "10") Integer pageCount) {
        return todoService.getAllTodoPaging(pageNumber, pageCount);
    }

2. TodoRepository.java

Pageable 인터페이스를 사용하여 페이징 및 정렬

public interface TodoRepository extends JpaRepository<Todo, Long> {

    Page<Todo> findAll(Pageable pageable);
    List<Todo> findAllByOrderByModifiedAtDesc();

}

3. TodoService.java

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도 수정하거나 추가해야한다.


1. Todo.java

cascade = CascadeType.REMOVE를 추가해서 일정을 삭제시 일정과 연관된 댓글들도 삭제

@OneToMany(mappedBy = "todo", cascade = CascadeType.REMOVE)
    private List<Comment> comments;

2. TodoController.java

일정을 삭제할 delete 메서드 추가

    @DeleteMapping("/todo/{id}")
    public ResponseEntity<Void> deleteTodo(@PathVariable Long id) {
        todoService.deleteTodo(id);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }

3. TodoService.java

일정을 삭제할 로직을 구현

    public void deleteTodo(Long id) {
        // 해당하는 일정이 있는지 확인
        Todo todo = findTodo(id);

        todoRepository.delete(todo);
    }

잘 실행된다.!

profile
첫 시작

0개의 댓글