📣 Alpura Back Java Library — Notificaciones
Esta librería facilita la construcción y el envío uniforme de notificaciones desde tu aplicación Java 21 + Spring Boot 3.4.4 a un microservicio de notificaciones HTTP.
🛠️ Requisitos
- Java: 21 (Temurin recomendado)
- Spring Boot: 3.4.4 o superior
📥 Instalación
Usando Maven
<dependency>
<groupId>com.alpura.notification</groupId>
<artifactId>alpura-back-java-lib-notification</artifactId>
<version>1.0</version>
</dependency>
Para Gradle usa:
implementation("com.alpura.notification:alpura-back-java-lib-notification:1.0")
🔍 Escanear paquete
Incluye el paquete en tu @ComponentScan para registrar automáticamente beans internos:
@SpringBootApplication
@ComponentScan({
"com.alpura.notification", // 🧠 Obligatorio
// otros paquetes
})
public class ExApplication {
public static void main(String[] args) {
SpringApplication.run(ExApplication.class, args);
}
}
🚀 ¿Qué hace esta librería?
- Modela la notificación completa en un solo objeto (
NotificationVO). - Valida campos obligatorios con Bean Validation.
- Separa la construcción del payload del envío HTTP.
- Simplifica reintentos y manejo de errores mediante
RestTemplate.
📦 Estructura de datos
NotificationVO
public class NotificationVO {
@NotEmpty List<ChannelEnum> channel; // ✅ Obligatorio
@NotEmpty Map<String,String> data; // ✅ Obligatorio (≥1)
@NotEmpty List<RecipientVO> recipient; // ✅ Obligatorio (≥1)
List<FileVO> fileId; // ❌ Opcional
@NotNull Integer templateId; // ✅ Obligatorio
@NotNull UserLoggedInfoVO userLoggedInfo; // ✅ Obligatorio
}
(Ver paquete com.alpura.utilities.vo para getters/setters)
Campos clave
data: mapa de pares clave–valor que la plantilla sustituye. Ej.:username,orderId.templateId: identificador numérico de la plantilla registrada en el microservicio de notificaciones.userLoggedInfo: contexto del usuario autenticado (userId, email, roles, token) usado para auditoría y propagación del header Authorization.
RecipientVO
public class RecipientVO {
String userEmail; // Correo válido
String userPhone; // Teléfono internacional '+XXXXXXXXXXX'
}
FileVO
public class FileVO {
@NotBlank(message = "fileId is required")
String fileId; // UUID del archivo almacenado en tu File Service
@NotBlank(message = "fileName is required")
String fileName; // Nombre original del archivo (incluye extensión)
@NotBlank(message = "contentType is required")
String contentType; // Tipo MIME, p. ej. "application/pdf"
}
```java
public class FileVO {
String fileId; // UUID del archivo cargado
}
ChannelEnum
public enum ChannelEnum { EMAIL, WHATSAPP, TELEGRAM, TEAMS, PUSH }
🧩 Uso paso a paso
1. Configura la URL del servicio
application.yml:
notification:
service:
base-url: http://localhost:9090/api/v1/notification/message
2. Inyecta el servicio en la la clase a ocupar
@Autowired
private INotificationServiceLib notificationService;
3. Crea y envía una notificación
@PostMapping("/send")
public ResponseEntity<Void> sendNotification(
@Validated(BaseNoBlankGroup.class) @RequestBody NotificationVO notification) {
//Es importante mandar el UserLoggedInfo, para poder enviarle las cabeceras con la autorizacion a la api notification.
notification.setUserLoggedInfo(getUserInfoFromContext());
notificationService.sendNotification(notification);
return ResponseEntity.ok().build();
}
✅ Validaciones automáticas
channel,recipient,datano deben estar vacíos.templateIdyuserLoggedInfono deben ser nulos.- Formato de email/teléfono validado con anotaciones estándar.
- Si falla alguna validación se lanza
ConstraintViolationExceptioncon detalle.
📋 Ejemplo de payload JSON
{
"channel": ["EMAIL"],
"templateId": 42,
"data": {
"username": "María",
"orderId": "12345"
},
"fileId": [
{ "fileId": "uuid-del-archivo-1" }
],
"recipient": [
{
"userEmail": "maria.gomez@example.com",
"userPhone": "+525599988877"
}
],
"userLoggedInfo": {
"userId": "abc123",
"email": "admin@example.com",
"roles": ["ADMIN"],
"token": "eyJhbGciOi..."
}
}
🔧 Arquitectura interna
Componentes clave
| Clase | Paquete | Rol |
|---|---|---|
INotificationServiceLib | com.alpura.notification.service | Contrato para enviar notificaciones. |
NotificationServiceImpl | com.alpura.notification.service.impl | Implementación por defecto que construye la petición HTTP y maneja errores. |
NotificationClientConfig | com.alpura.notification.config | Configura el RestTemplate con timeouts y Jackson. |
Flujo de ejecución
Personalización rápida
- Timeouts:
notification.service.connect-timeout/read-timeout. - Token Bearer: Se extrae de
UserLoggedInfoVO.tokenautomáticamente. - Reintentos: Envuelve
sendNotificationen@Retryableo usa Resilience4j.