NotificationSvc
El Servicio de Notificaciones (NotificationSvc) es responsable de gestionar y enviar todas las notificaciones a usuarios a través de múltiples canales como email, SMS, push y mensajes en la aplicación.
Responsabilidades Principales
NotificationSvc es responsable de:
- Notificaciones Multicanal: Envío por email, SMS, push y mensajes en la app
- Gestión de Plantillas: Almacenamiento y renderizado de plantillas
- Notificaciones Programadas: Envíos diferidos y recurrentes
- Historial y Seguimiento: Registro de todas las notificaciones enviadas
- Preferencias de Usuario: Configuración de canales por usuario
Arquitectura
El servicio implementa una arquitectura orientada a eventos con CQRS:
Modelo de Datos
Entidades principales:
| Entidad | Descripción |
|---|---|
| Notificación | Mensaje principal con contenido y metadatos |
| Plantilla | Estructura reutilizable para notificaciones |
| Canal | Medio de entrega (email, SMS, push, in-app) |
| Historial | Registro de envíos y estados |
| PreferenciaUsuario | Configuración por usuario y tipo |
| ProgramaciónEnvío | Configuración para envíos programados |
Implementación CQRS
Comandos
EnviarNotificación: Enviar una notificación inmediataProgramarNotificación: Programar para envío futuroCrearPlantilla: Crear plantilla de notificaciónActualizarPlantilla: Modificar plantilla existenteCambiarPreferenciasUsuario: Actualizar preferenciasCancelarNotificaciónProgramada: Cancelar envío futuro
Consultas
ObtenerHistorialNotificaciones: Ver historial con filtrosObtenerPlantillas: Listar plantillas disponiblesVerificarEstadoNotificación: Consultar estado de envíoObtenerPreferenciasUsuario: Consultar configuraciónListarNotificacionesProgramadas: Ver envíos futuros
Endpoints API
Notificaciones
POST /api/notifications: Enviar notificaciónGET /api/notifications: Listar notificaciones con filtrosGET /api/notifications/{id}: Ver detalles de notificaciónPOST /api/notifications/schedule: Programar notificaciónDELETE /api/notifications/scheduled/{id}: Cancelar programada
Plantillas
POST /api/templates: Crear plantillaGET /api/templates: Listar plantillasGET /api/templates/{id}: Obtener plantillaPUT /api/templates/{id}: Actualizar plantillaDELETE /api/templates/{id}: Eliminar plantilla
Preferencias de Usuario
GET /api/preferences/{userId}: Ver preferenciasPUT /api/preferences/{userId}: Actualizar preferenciasPUT /api/preferences/{userId}/opt-out: Darse de baja
Eventos Publicados
El servicio publica los siguientes eventos en RabbitMQ:
NotificaciónEnviada: Cuando se envía una notificaciónNotificaciónProgramada: Cuando se programa una notificaciónNotificaciónFallida: Cuando falla el envío de una notificaciónPlantillaCreada: Cuando se crea una nueva plantillaPreferenciasActualizadas: Cuando cambian las preferencias
Eventos Consumidos
El servicio escucha los siguientes eventos:
UsuarioRegistrado(UserSvc): Para enviar bienvenidaPedidoCreado(OrderSvc): Confirmar nuevo pedidoEstadoPedidoActualizado(OrderSvc): Actualizar sobre pedidoPagoRecibido(PaymentSvc): Confirmar pago procesadoProductoEnOferta(ProductSvc): Notificar ofertas a usuarios
Integración con Otros Servicios
- UserSvc: Obtención de datos de contacto y preferencias
- OrderSvc: Recepción de eventos para notificaciones de pedidos
- PaymentSvc: Alertas sobre pagos y facturas
- ProductSvc: Notificaciones sobre productos y ofertas
Tecnologías Utilizadas
- .NET 10: Framework base
- PostgreSQL: Base de datos principal
- Dapper: Micro ORM para acceso a datos
- RabbitMQ: Mensajería para eventos
- Redis: Caché para plantillas frecuentes
- SendGrid: Proveedor de email
- Twilio: Proveedor de SMS
- Firebase: Notificaciones push
Escalabilidad y Rendimiento
- Sistema de colas para procesamiento asíncrono
- Agrupación de notificaciones para envío eficiente
- Priorización de mensajes críticos
- Limitación de tasa por usuario y canal
- Escalado horizontal de los workers de procesamiento
Despliegue
- Despliegue directo en servidores dedicados
- Alta disponibilidad: múltiples instancias
- Copias de seguridad diarias
- Actualizaciones Blue/Green para minimizar tiempo de inactividad
Monitoreo
- Dashboard de notificaciones enviadas por canal
- Métricas de tasa de entrega y fallos
- Alertas para problemas con proveedores
- Análisis de engagement por tipo de notificación
- Logs estructurados para seguimiento completo