Diego Rubio
☁️📊

Evolución del Generador de Reportes

17-Noviembre-2025

Descripción

El proyecto llamado “Evolución del Generador de Reportes V1” es una aplicación web diseñada para crear reportes CSV basados en datos externos provenientes de la PokeAPI. Su propósito principal es ofrecer una herramienta moderna, escalable y fácilmente extensible que permita a los usuarios solicitar, generar y gestionar reportes de manera eficiente, utilizando una arquitectura distribuida apoyada en servicios de Azure.

La aplicación combina un frontend intuitivo desarrollado con Next.js, una API robusta construida con FastAPI, y un proceso asíncrono gestionado por Azure Functions, lo que permite generar reportes sin bloquear la experiencia del usuario. Cada componente cumple un rol específico dentro del flujo: la UI captura las solicitudes, la API valida y almacena la información, y el worker procesa los datos y produce los archivos CSV que son almacenados en Azure Blob Storage.

El propósito de esta asignación o proyecto es demostrar la capacidad de extender un sistema existente sin comprometer su funcionalidad en la nube. Durante esta asignación, mejoré la solución añadiendo características más completas, integrando datos enriquecidos, permitiendo muestreo aleatorio y habilitando la eliminación completa de reportes. Estos cambios responden a necesidades reales de usuarios que requieren flexibilidad, control y mayor profundidad en los datos generados, manteniendo siempre un enfoque en el rendimiento y la experiencia de uso.

Funcionalidades Implementadas

1. Eliminación Completa de Reportes

Añadí la capacidad de eliminar un reporte tanto a nivel de base de datos como en Azure Blob Storage.

Incluye:

  • Botón de eliminar en cada fila del frontend
  • Modal de confirmación
  • Llamada HTTP DELETE al backend
  • API que elimina:
    • Registro del reporte en SQL
    • Archivo CSV en Blob Storage
  • Manejo de errores y actualización en la UI

2. Enriquecimiento del Reporte con Detalles Complejos del Pokémon

El worker ahora no solo obtiene el nombre y la URL del Pokémon, sino también:

  • Estadísticas base (HP, Attack, Defense, Sp. Atk, Sp. Def, Speed)
  • Habilidades (lista o formato string)

El CSV ahora incluye estas columnas adicionales, permitiendo crear reportes mucho más valiosos.

3. Reportes con Muestreo Aleatorio

Se añadió un campo llamado sample_size, permitiendo al usuario generar reportes con un número limitado de registros elegidos aleatoriamente.

Implementación:

  • Validación de número entero positivo en Next.js
  • API actualizada para recibir y almacenar sample_size
  • Azure Function usa random.sample() para seleccionar registros aleatorios
  • Generación del CSV con el subconjunto resultante

Desafíos Técnicos y Soluciones

La mayor parte de desafios que tuve durante el transcurso de este proyecto, fue al momento de las configuraciones, ya sea versiones de phyton, configuracion el function app y hacer release al docker, a continuacion explicarle los desafios y las soluciones que encontre

Uso de docker desktop y habilitacion de Hyper-V

Reto

Puede parecer ridiculo, ese reto, pero en mi caso, cuando instale este docker y lo use, me dio el problema de Virtualization support not detected, en mi caso ya tenia habilitado la virtualización, pero no me funcionaba, era que estaba deshabiltado el Hyper-V y me costo un poco resolverlo

Solución

Mediante investigación, lo pude resolver, solo tenia que ejecutar varios comandos en el PowerShell como Administrador, fueron los siguiente:

dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart
Cuando termine, ejecuta:

dism /online /enable-feature /featurename:Microsoft-Hyper-V-Tools-All /all /norestart
dism /online /enable-feature /featurename:Microsoft-Hyper-V-Management-PowerShell /all /norestart
Ahora reinicia la PC.
Después del reinicio se abre PowerShell nuevamente como admin y ejecuta:
dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Reinicia otra vez.
Luego, se configurar el WSL2 como versión por defecto
Ya en el sistema o powershell como administracion ejecutar:
wsl --set-default-version 2
Despues de seguir esos pasos, el docker ya no mostro ese error y me inicio normalmente

Uso de Pyenv en windows

Reto

El reto que tuve que no podia usa varios versiones de python en mi pc y ocupa el pyenv en windows 10 que era el pyenv-win, pero no sabia instalarlo, y cuando lo instale, no me funcionaba poner varias versiones en mi proyecto, solo me daba la versión que tenia ya mi pc, me costo resolverlo

Solución

Lo unico que hice fue irme al repositorio de pyenv-win en github y seguir el Readme de como instalarlo, y luego en las variables de entorno del usuario, esas variables tuve que subir su prioridad, que este encima de mi variable de entorno de python que ya tenia el sistema.

Diagrama de Arquitectura Utiliza para el proyecto

Diagrama de Arquitectura Utiliza para el proyecto

Tecnologías utilizadas

Terraform Azure SQL Next.js Python Azure Functions FastAPI Queue Storage App Service Blob Storage Storage account IaC Cloud Architecture

Enlaces