feat(user): implementada paginación y ordenación en la función readAll

parent bc5f730a
package com.example.apprecetas.user.application;
import com.example.apprecetas.user.domain.entity.User;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
public interface ReadUserUseCase {
......@@ -10,6 +10,6 @@ public interface ReadUserUseCase {
User readByEmail(String email);
List<User> readAll();
Page<User> readAll(Pageable pageable);
}
......@@ -8,10 +8,10 @@ import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ReadUserUseCaseImpl implements ReadUserUseCase {
......@@ -34,9 +34,8 @@ public class ReadUserUseCaseImpl implements ReadUserUseCase {
}
@Override
public List<User> readAll() {
return repository.readAll().stream()
.map(mapper::mapDocument)
.toList();
public Page<User> readAll(Pageable pageable) {
return repository.readAll(pageable)
.map(mapper::mapDocument);
}
}
package com.example.apprecetas.user.domain.repository;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Optional;
public interface ReadUserRepository {
......@@ -11,6 +12,6 @@ public interface ReadUserRepository {
Optional<UserDocument> readByEmail(String email);
List<UserDocument> readAll();
Page<UserDocument> readAll(Pageable pageable);
}
package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.user.application.ReadUserUseCase;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.output.UserOutputDto;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
......@@ -29,13 +32,25 @@ public class ReadUserController {
}
@GetMapping
public ResponseEntity<List<UserOutputDto>> readAll() {
if (service.readAll().isEmpty())
return ResponseEntity.noContent().build();
return ResponseEntity.ok().body(service.readAll().stream()
.map(mapper::map)
.toList()
);
public ResponseEntity<Page<UserOutputDto>> readAll(@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "5") int size,
@RequestParam(required = false) String sortBy,
@RequestParam(required = false, defaultValue = "ASC") String sortDirection) {
// Si no se proporciona un campo para ordenar, solo la paginación
if (sortBy == null || sortBy.isEmpty()) {
Pageable pageable = PageRequest.of(page, size);
Page<UserOutputDto> dtoPage = service.readAll(pageable).map(mapper::map);
return ResponseEntity.ok().body(dtoPage);
}
// Crea la dirección de ordenación a partir del parámetro
Sort.Direction direction = Sort.Direction.fromString(sortDirection);
// Crea el objeto de paginación y ordenación
Pageable pageable = PageRequest.of(page, size, Sort.by(direction, sortBy));
Page<UserOutputDto> dtoPage = service.readAll(pageable).map(mapper::map);
return ResponseEntity.ok().body(dtoPage);
}
}
......@@ -4,9 +4,10 @@ import com.example.apprecetas.user.domain.repository.ReadUserRepository;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserDocument;
import com.example.apprecetas.user.infrastructure.repository.mongodb.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
......@@ -26,7 +27,7 @@ public class ReadUserRepositoryImpl implements ReadUserRepository {
}
@Override
public List<UserDocument> readAll() {
return userRepository.findAll();
public Page<UserDocument> readAll(Pageable pageable) {
return userRepository.findAll(pageable);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment