Users / Add pagination

This commit is contained in:
parent 745795e7b7
commit 5fbd7c5510
3 changed files with 21 additions and 4 deletions

View File

@ -10,8 +10,11 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.example.demo.core.api.PageDto;
import com.example.demo.core.api.PageDtoMapper;
import com.example.demo.core.configuration.Constants; import com.example.demo.core.configuration.Constants;
import com.example.demo.users.model.UserEntity; import com.example.demo.users.model.UserEntity;
import com.example.demo.users.service.UserService; import com.example.demo.users.service.UserService;
@ -46,10 +49,10 @@ public class UserController {
// Получить все элементы // Получить все элементы
@GetMapping @GetMapping
public List<UserDto> getAll() { public PageDto<UserDto> getAll(
return userService.getAll().stream() @RequestParam(name = "page", defaultValue = "0") int page,
.map(this::toDto) @RequestParam(name = "size", defaultValue = Constants.DEFAULT_PAGE_SIZE) int size) {
.toList(); return PageDtoMapper.toDto(userService.getAll(page, size), this::toDto);
} }
// Получить элемент по идентификатору // Получить элемент по идентификатору

View File

@ -2,12 +2,17 @@ package com.example.demo.users.repository;
import java.util.Optional; import java.util.Optional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import com.example.demo.users.model.UserEntity; import com.example.demo.users.model.UserEntity;
// Хранилище для сущности "Пользователь" // Хранилище для сущности "Пользователь"
public interface UserRepository extends CrudRepository<UserEntity, Long> { public interface UserRepository extends CrudRepository<UserEntity, Long> {
// Получить список всех пользовалей (с пагинацией)
Page<UserEntity> findAll(Pageable pageable);
// Получить пользователя по имени/логину // Получить пользователя по имени/логину
Optional<UserEntity> findByUsername(String username); Optional<UserEntity> findByUsername(String username);

View File

@ -3,6 +3,8 @@ package com.example.demo.users.service;
import java.util.List; import java.util.List;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -43,6 +45,13 @@ public class UserService {
return StreamSupport.stream(repository.findAll().spliterator(), false).toList(); return StreamSupport.stream(repository.findAll().spliterator(), false).toList();
} }
// Получить все элементы (с пагинацией)
@Transactional(readOnly = true)
public Page<UserEntity> getAll(int page, int size) {
final PageRequest pageRequest = PageRequest.of(page, size);
return repository.findAll(pageRequest);
}
// Получить элемент по идентификатору // Получить элемент по идентификатору
@Transactional(readOnly = true) @Transactional(readOnly = true)
public UserEntity get(Long id) { public UserEntity get(Long id) {