feat(user): implementado un buscador por nombre y email en el repositorio,…

feat(user): implementado un buscador por nombre y email en el repositorio, servicio y controlador de ReadUser
parent 74422536
......@@ -10,6 +10,8 @@ public interface ReadUserUseCase {
User readByEmail(String email);
Page<User> readByNameOrEmail(String query, Pageable pageable);
Page<User> readAll(Pageable pageable);
}
......@@ -34,6 +34,12 @@ public class ReadUserUseCaseImpl implements ReadUserUseCase {
}
@Override
public Page<User> readByNameOrEmail(String query, Pageable pageable) {
return repository.readByNameOrEmail(query, query, pageable)
.map(mapper::mapDocument);
}
@Override
public Page<User> readAll(Pageable pageable) {
return repository.readAll(pageable)
.map(mapper::mapDocument);
......
......@@ -12,6 +12,8 @@ public interface ReadUserRepository {
Optional<UserDocument> readByEmail(String email);
Page<UserDocument> readByNameOrEmail(String name, String email, Pageable pageable);
Page<UserDocument> readAll(Pageable pageable);
}
package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.user.application.ReadUserUseCase;
import com.example.apprecetas.user.domain.entity.User;
import com.example.apprecetas.user.infrastructure.controller.dto.output.UserOutputDto;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import lombok.RequiredArgsConstructor;
......@@ -31,6 +32,15 @@ public class ReadUserController {
return ResponseEntity.ok().body(mapper.map(service.readById(userId)));
}
@GetMapping("/search")
public ResponseEntity<Page<UserOutputDto>> readByNameOrEmail(@RequestParam(required = false) String query,
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int size) {
Pageable pageable = PageRequest.of(page, size);
Page<UserOutputDto> dtoPage = service.readByNameOrEmail(query, pageable).map(mapper::map);
return ResponseEntity.ok().body(dtoPage);
}
@GetMapping
public ResponseEntity<Page<UserOutputDto>> readAll(@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "5") int size,
......
......@@ -27,6 +27,11 @@ public class ReadUserRepositoryImpl implements ReadUserRepository {
}
@Override
public Page<UserDocument> readByNameOrEmail(String name, String email, Pageable pageable) {
return userRepository.findByNameIgnoreCaseContainingOrEmailIgnoreCaseContaining(name, email, pageable);
}
@Override
public Page<UserDocument> readAll(Pageable pageable) {
return userRepository.findAll(pageable);
}
......
package com.example.apprecetas.user.infrastructure.repository.mongodb;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.Optional;
public interface UserRepository extends MongoRepository<UserDocument, String> {
Optional<UserDocument> findByEmail(String email);
Page<UserDocument> findByNameIgnoreCaseContainingOrEmailIgnoreCaseContaining(String name, String email, Pageable 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