Skip to content

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.md principal con overview del sistema
  • README.md por servicio (api, worker, app)
  • .env.example con 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