지난 번과 마찬가지로 Page와 Pageable,queryDSL을 사용하는 것을 전제로 한다. 페이징을 적용할 부분은 이용권 전체조회 API, 예약 전체조회 API 부분이다.

개발 순서

  1. 예약 조회의 경우 예약 완료가 된 상태만 가져오는 것이 필요하다. 이를 위해 booking테이블에 예약 완료 상태를 알 수 있는 Column을 하나 만든 후, @index를 통해 검색기능을 활성화 하는 것이 필요해 보인다.
  2. 이용권 전체 조회 시에 정렬 기준은 started_day를 기준으로 한다
  3. 앞서 페이징 구현-1 과 마찬가지로 현재 페이지의 위치와 전체 페이지 수에 대한 코드를 분리하자.

이용권 전체 조회

이용권 전체 조회 시에 queryDSL로 커스텀할 부분은 없어보인다. JpaRepository에서 findAll 메서드가 Pageable을 제공함으로 이용권 컨트롤러에서 @PageableDefault 만 추가하자.

이용권 controller

authentication의 경우 securityConfig 부분을 리펙토링 하며 삭제할 예정. 페이징 구현에서는 신경 쓸 필요가 없는 부분이다.

이용권 service

두 줄로 페이징 구현이 완료 되었다.

예약 전체 조회

앞서 말했듯이 예약이 완료된 상태만을 페이지에 담고 싶다. 이를 위해선 entity에 해당 필드를 추가해야 하지만 이는 리팩토링 요소로 남겨두자.

또한 현재 유저가 예약한 것만 가져와야 함으로 userId와 PassId를 기준으로 가져와야 할 듯 보인다.

예약권 controller

정렬기준은 같은 이용권 끼리 모여서 보일 수 있도록 passId를 기준으로 한다.

예약권 service

테스트

Page 타입으로 데이터를 리턴했을 때, 정상적인 값이 Body로 가는 것을 볼 수 있다.

생각해볼만한 점?

1.해당 url로 접근할 때 유저의 권한만 체크한다. 이때, 자신이 아닌 다른 유저의 Id로 get요청을 날리게 되었을 경우 유저의 정보가 그대로 노출되는 위험이 있다. 따라서 이를 따로 처리해주는 로직을 만들 필요가 있어보인다.