Class GenericPaginationService<T,ID>
java.lang.Object
com.aceelv.utilsmongodb.pagination.GenericPaginationService<T,ID>
- Type Parameters:
T
- Tipo de entidad de dominio (ej: User, Product, Order)ID
- Tipo del identificador de la entidad (tÃpicamente String para MongoDB)
Servicio genérico para operaciones de paginación, filtrado y búsqueda en MongoDB.
Esta clase proporciona funcionalidad completa para realizar consultas paginadas con filtros complejos, búsqueda de texto, ordenamiento y validaciones automáticas.
CaracterÃsticas Principales:
- Paginación eficiente con conteo total de documentos
- Filtros por campos especÃficos (ID, estados, etc.)
- Búsqueda de texto case-insensitive con regex
- Filtros de fecha con operadores de comparación
- Filtros de rango de fechas
- Ordenamiento múltiple por cualquier campo
- Validaciones automáticas de entrada
- Soporte para campos anidados con notación punto
Ejemplo de Configuración:
@Configuration
public class PaginationConfig {
@Bean
public GenericPaginationService<User, String> userPaginationService(
UserRepository userRepository,
MongoTemplate mongoTemplate) {
return new GenericPaginationService<>(userRepository, mongoTemplate, User.class);
}
}
Ejemplo de Uso Básico:
@Service
public class UserService {
private final GenericPaginationService<User, String> paginationService;
public Page<User> searchUsers(String searchTerm, int page, int size) {
FilteredRequest request = new FilteredRequest();
request.setPage(page);
request.setPageSize(size);
request.setSearchString(searchTerm);
request.setSearchFields(Arrays.asList(
new FilteredRequest.SearchField("name", null),
new FilteredRequest.SearchField("email", null)
));
return paginationService.getFilteredPage(request);
}
}
Ejemplo de Uso Avanzado:
// Búsqueda con múltiples filtros y ordenamiento
FilteredRequest request = new FilteredRequest();
request.setPage(1);
request.setPageSize(20);
// Buscar "admin" en nombre y email
request.setSearchString("admin");
request.setSearchFields(Arrays.asList(
new FilteredRequest.SearchField("name", null),
new FilteredRequest.SearchField("email", null)
));
// Filtrar solo usuarios activos
request.setUuids(Arrays.asList(
new FilteredRequest.FieldFilter("status", "ACTIVE")
));
// Usuarios creados en los últimos 30 dÃas
request.setDateFilters(Optional.of(Arrays.asList(
new FilteredRequest.DateFilter("createdAt", "2024-05-29", 1)
)));
// Ordenar por fecha de creación (más recientes primero)
request.setSortOrders(Arrays.asList(
new FilteredRequest.SortOrder("createdAt", -1)
));
Page<User> results = paginationService.getFilteredPage(request);
- Since:
- 1.0
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionGenericPaginationService
(org.springframework.data.mongodb.repository.MongoRepository<T, ID> repository, org.springframework.data.mongodb.core.MongoTemplate mongoTemplate, Class<T> entityClass) Constructor para crear una instancia del servicio de paginación. -
Method Summary
Modifier and TypeMethodDescriptionorg.springframework.data.domain.Page<T>
getFilteredPage
(FilteredRequest request) Ejecuta una consulta paginada con filtros, búsqueda y ordenamiento.
-
Constructor Details
-
GenericPaginationService
public GenericPaginationService(org.springframework.data.mongodb.repository.MongoRepository<T, ID> repository, org.springframework.data.mongodb.core.MongoTemplate mongoTemplate, Class<T> entityClass) Constructor para crear una instancia del servicio de paginación.- Parameters:
repository
- Repositorio MongoDB para la entidad especÃficamongoTemplate
- Template de MongoDB para consultas personalizadasentityClass
- Clase de la entidad para operaciones de tipo- Throws:
IllegalArgumentException
- si algún parámetro es null
-
-
Method Details
-
getFilteredPage
Ejecuta una consulta paginada con filtros, búsqueda y ordenamiento.Este método realiza las siguientes operaciones:
- Valida automáticamente la petición de entrada
- Construye la consulta MongoDB con todos los filtros especificados
- Aplica ordenamiento según los criterios especificados
- Ejecuta la consulta paginada
- Cuenta el total de documentos para la paginación
- Retorna una página con metadatos completos
Validaciones Automáticas:
- LÃmites de página: 1-10,000
- LÃmites de tamaño: 1-1,000 elementos
- Validación de nombres de campos
- Validación de formatos de fecha
- LÃmites de longitud en strings de búsqueda
- Parameters:
request
- Petición con todos los criterios de filtrado y paginación- Returns:
- Página con los resultados y metadatos de paginación
- Throws:
ValidationException
- si la petición no pasa las validacionesRuntimeException
- si ocurre un error al construir o ejecutar la consulta MongoDBEjemplo:
FilteredRequest request = new FilteredRequest(); request.setPage(1); request.setPageSize(10); request.setSearchString("john"); try { Page<User> users = paginationService.getFilteredPage(request); System.out.println("Encontrados: " + users.getTotalElements()); users.getContent().forEach(user -> System.out.println(user.getName())); } catch (ValidationException e) { System.err.println("Errores de validación: " + e.getValidationErrors()); }
-