//전체셀러 목록 조회
@Override
@Transactional(readOnly = true)
public List<SellerProfileResponseDto> allSellerList(PageDTO pageDTO){
// 이부분은 List로 받아도됨 (userRepository 도 수정)
Page<User> usersByUserRole = userRepository
.findUsersByUserRole(UserRole.SELLER, pageDTO.toPageable());
List<SellerProfileResponseDto> sellerProfileResponseDtos = new ArrayList<>();
for(User user:usersByUserRole){
if(!user.getProfile().getIntroduce().isEmpty()) {
sellerProfileResponseDtos.add(new SellerProfileResponseDto(user.getUserName(), user.getProfile().getIntroduce()));
}
}
return sellerProfileResponseDtos;
}
이게 전체 코드인데 주석에도 있듯이
Page<User> usersByUserRole = userRepository
.findUsersByUserRole(UserRole.SELLER, pageDTO.toPageable());
Page로 받을 필요없이 List로 받으면 된다
List<User> usersByUserRole = userRepository
.findUsersByUserRole(UserRole.SELLER, pageDTO.toPageable());
@ReqyiredArgsConstructor
public class PageDTO {
@Positive // 0보다 큰수
private final Integer currentPage;
private final Integer size;
private String sortBy; // 필요할 때 final 붙이면 된다
public Pageable toPageable() {
return PageRequest.of(currentPage-1, size, Sort.by(sortBy).descending());
}
}
currentPage는 0보다 큰수가 들어와서 1부터시작이다.
// UserService 일부
public List<User> findAll(PageDTO pageDTO){
return userRepository.findUsers(pageDTO.toPageable());
}
-1처리가 pageDTO.toPageable으로 인해 자동으로 이루어진다.
@Test
void pageDTOTest() {
// given
var newUser1 = User.builder().username("new_user1").password("new-pass1").build();
var newUser2 = User.builder().username("new_user2").password("new-pass2").build();
var newUser3 = User.builder().username("new_user3").password("new-pass3").build();
userRepository.save(newUser1);
userRepository.save(newUser2);
userRepository.save(newUser3);
var = pageDTO = new pageDTO(1,2,"paassword");
// when
var page = userRepository.findAll(pageDTO.toPageable());
// then
assert page.getContent().size == 2;
}
@GetMapping("/users")
public Page<User> getAllUsers(Pageable pageable) {
return userRepository.findAll(pageable);
}