Appearance
Sistema de Procesamiento de Envío Masivo de Correos
Descripción General
Desarrollar un sistema distribuido de procesamiento asíncrono para envío masivo de correos electrónicos utilizando arquitectura de colas con Bull y Redis. El sistema debe implementar un flujo completo desde la solicitud del usuario hasta el envío efectivo de emails, con trazabilidad completa en base de datos, reintentos automáticos y monitoreo en tiempo real del estado de los trabajos.
Objetivo Principal
Implementar un sistema de procesamiento en background que demuestre el dominio de arquitecturas orientadas a eventos, gestión de trabajos asíncronos, y coordinación entre múltiples servicios (API, Worker, Frontend), aplicando patrones de diseño para sistemas distribuidos con alta confiabilidad y observabilidad.
Stack Tecnológico
Backend
- Runtime: Node.js 22
- Framework: Express.js
- ORM: Prisma
- Queue: Bull + BullMQ
- Email: Nodemailer
- Validación: express-validator
- Logging: Winston
Frontend
- Framework: Next.js 15 (App Router)
- Styling: TailwindCSS 4
- Forms: Formik + yup
- HTTP Client: Axios
- UI Components: shadcn/ui (Optional)
Infraestructura
- Base de Datos: MySQL 8.0
- Cache/Queue: Redis 7.0
Diagramas del Sistema
Arquitectura de Solución
Diagrama de Secuencia
Criterios de Evaluación
- Arquitectura: Separación clara de responsabilidades (Controllers/Services/Repositories) y buen uso del patrón orientado a eventos.
- Funcionalidad: Los endpoints funcionan correctamente, el worker procesa los jobs sin errores y los reintentos automáticos operan según lo esperado.
- Buenas Prácticas: Código limpio, manejo robusto de errores, logs estructurados y validaciones correctas.
- Base de Datos: Schema normalizado, índices adecuados y migraciones bien estructuradas.
- Experiencia de Usuario: Interfaz intuitiva, feedback visual del estado de los trabajos y manejo de errores amigable.
- Documentación: Instrucciones claras de configuración local y documentación de variables de entorno.
Entregables
Código Fuente
- Repositorio Git con estructura clara
- Commits atómicos y descriptivos
- .gitignore apropiado
Documentación
README.mdprincipal con overview del sistemaREADME.mdpor servicio (api, worker, app).env.examplecon todas las variables necesarias- Diagramas de arquitectura (mermaid)
Base de Datos
- Schema de Prisma completo
- Migraciones funcionando
- Seed con datos de prueba
Objetivos de Aprendizaje Esperados
Al completar este caso, el desarrollador debe demostrar:
✅ Arquitecturas Distribuidas: Diseño de sistemas con múltiples servicios coordinados
✅ Procesamiento Asíncrono: Implementación de colas con Bull y Redis
✅ Persistencia de Datos: Diseño de schemas relacionales complejos
✅ APIs RESTful: Diseño de endpoints siguiendo convenciones HTTP
✅ Worker Patterns: Implementación de workers con reintentos y rate limiting
✅ Frontend Moderno: Next.js con server/client components y formularios complejos
✅ Observabilidad: Logging, métricas y monitoreo de sistemas distribuidos
✅ Error Handling: Manejo robusto de errores en sistemas asíncronos
