Skip to content

About

API RESTful en TypeScript y Express.js que gestiona la carga de archivos a AWS S3 y encola metadatos en AWS SQS para procesamiento asíncrono.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Generador de Boletines

Este proyecto es un servicio de backend desarrollado en TypeScript que actúa como un generador de boletines. Su función principal es recibir solicitudes de creación de boletines, gestionar la subida de archivos asociados y encolar la información para su procesamiento asíncrono.

Descripción del Proyecto

El servicio expone un endpoint API REST (/boletines) que permite la recepción de contenido de boletines, correos electrónicos de destino y archivos adjuntos. Una vez recibida la información, el servicio realiza las siguientes acciones:

  1. Almacenamiento de Archivos: Sube el archivo adjunto a un bucket de Amazon S3, generando una URL accesible para el archivo.
  2. Encampado de Mensajes: Construye un payload JSON con el contenido del boletín, el correo electrónico del destinatario y la URL del archivo en S3. Este payload es enviado a una cola de Amazon SQS para ser procesado por otro servicio de forma asíncrona.
  3. Respuesta API: Retorna una respuesta indicando que el boletín ha sido recibido y encolado correctamente.

Esto permite desacoplar la recepción de la información de su procesamiento intensivo, mejorando la escalabilidad y la fiabilidad del sistema.

Tecnologías Utilizadas

  • Lenguaje de Programación:
    • TypeScript ^5.8.3
    • Node.js 20 (según Dockerfile)
  • Framework Web:
    • Express.js ^4.21.2
  • Gestión de Archivos:
    • Multer ^1.4.5-lts.1
  • Servicios en la Nube:
    • AWS S3 (@aws-sdk/client-s3 ^3.782.0) - Para almacenamiento de objetos.
    • AWS SQS (@aws-sdk/client-sqs ^3.782.0) - Para colas de mensajes.
  • Contenerización:
    • Docker

Prerrequisitos

Antes de ejecutar el proyecto, asegúrate de tener instalados:

  • Node.js (versión 20 o superior)
  • npm (gestor de paquetes de Node.js)
  • Docker (opcional, para ejecutar en contenedor)
  • Credenciales de AWS configuradas con permisos de acceso para S3 (PutObject) y SQS (SendMessage).
  • Variables de entorno:
    • PORT: Puerto en el que el servidor escuchará (por defecto 8080).
    • AWS_REGION: Región de AWS donde se encuentran S3 y SQS (por defecto us-east-1).
    • S3_BUCKET: Nombre del bucket de S3 donde se almacenarán los archivos.
    • SQS_URL: URL de la cola SQS a la que se enviarán los mensajes.

Instalación

  1. Clona el repositorio:
    git clone https://github.com/SergioIsaacSantanaJimenez/generador-boletines-747109.git
    cd generador-boletines-747109
  2. Instala las dependencias:
    npm install

Ejecución

Modo Desarrollo

  1. Compila el código TypeScript:
    npm run build
  2. Inicia el servidor:
    npm start

Con Docker

  1. Asegúrate de tener Docker instalado.
  2. Construye la imagen de Docker:
    docker build -t generador-boletines .
  3. Ejecuta el contenedor, pasando las variables de entorno necesarias:
    docker run -p 8080:8080 -e S3_BUCKET="tu-bucket-s3" -e SQS_URL="tu-sqs-url" -e AWS_REGION="us-east-1" generador-boletines
    Reemplaza "tu-bucket-s3" y "tu-sqs-url" con los valores reales.

El servicio estará disponible en http://localhost:8080.

Estructura del Proyecto

  • src/index.ts: Punto de entrada de la aplicación, contiene la lógica del servidor Express, la gestión de subida de archivos, la interacción con AWS S3 y SQS.
  • package.json: Manifiesto del proyecto, scripts y dependencias.
  • Dockerfile: Definición para la construcción de la imagen de Docker.
  • dist/: Directorio de salida para el código TypeScript compilado.

Habilidades Técnicas Demostradas

Este proyecto demuestra las siguientes habilidades técnicas:

  • Desarrollo de API RESTful: Creación de un servidor robusto con Express.js para manejar solicitudes HTTP POST.
  • Manejo de Carga de Archivos: Implementación de multer para procesar y almacenar archivos subidos en memoria.
  • Integración con Servicios en la Nube (AWS):
    • Utilización del SDK de AWS para interactuar con Amazon S3 para el almacenamiento de objetos.
    • Utilización del SDK de AWS para enviar mensajes a colas de Amazon SQS, facilitando arquitecturas asíncronas y desacopladas.
  • Contenerización de Aplicaciones: Creación de un Dockerfile para empaquetar la aplicación y sus dependencias en una imagen de Docker, asegurando la portabilidad y la consistencia del entorno.
  • Programación Asíncrona: Manejo de operaciones de I/O y llamadas a servicios externos de forma asíncrona utilizando async/await en TypeScript.
  • Gestión de Errores y Logging: Implementación de un sistema de logging estructurado y manejo de errores para una mejor observabilidad y depuración.
  • Configuración Basada en Variables de Entorno: Diseño de la aplicación para ser configurable mediante variables de entorno, lo que facilita su despliegue en diferentes entornos (desarrollo, producción).
  • Desarrollo con TypeScript: Uso de TypeScript para un código más robusto, mantenible y escalable gracias a la tipificación estática.
  • Gestión de Dependencias: Manejo eficiente de dependencias de proyecto con npm.

About

API RESTful en TypeScript y Express.js que gestiona la carga de archivos a AWS S3 y encola metadatos en AWS SQS para procesamiento asíncrono.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages