Proyecto Serverless

Objetivo del Proyecto

Extender y adaptar esta aplicación base, añadiendo nuevas funcionalidades y demostrando habilidad para modificar y mejorar un sistema existente que debe permanecer desplegado y funcional en Azure.


Arquitectura del Sistema

DiagramaPokeQueue


Tareas a Realizar (Total: 90 Puntos)

Tarea 1: Implementar Eliminación Completa de Reportes (25 Puntos)

Frontend (NextJs)

  • Se ha añadido un botón de eliminar en cada fila de reporte, añadiendo una modal de confirmación como paso extra de seguridad, y al confirmar la eliminación se hace una llamada a la API que borra los registros de reporte de la Base de Datos y el BLOB Storage. Al llegar la confirmación al Front se refresca la lista de los reportes.

Botón eliminar

Modal confirmación

Confirmación eliminación

El registro 65 se ha eliminado:

Registro eliminado

Lista refrescada:

Lista actualizada

Backend (FastAPI)

  • Se ha creado un Endpoint de la API que recibe una solicitud HTTP con el método DELETE con el ID del elemento a eliminar.
  • Este Endpoint desencadena una serie de acciones:
    • Primero, revisa si el elemento está “eliminado en la base de datos”, si lo está, lanza un estado 404, si el elemento no está “eliminado”, entonces se elimina de la base.
    • Una vez eliminado el elemento de la base de datos, va a eliminar el archivo CSV del BLOB Storage, y una vez realizado se envía la respuesta del Endpoint.

Demostrando registro en la DB:

Registro en DB

Demostrando registro en el BLOB:

Registro en blob

Enviando petición:

Petición DELETE

Elemento eliminado:

DB después de eliminar

Blob después de eliminar

Estado después de eliminar

La captura anterior no estaba actualizada y solo debían estar el reporte 63 y 64

Estado final

Procedimiento almacenado para eliminar reportes:

ALTER PROCEDURE pokequeue.delete_poke_request(@id int)
AS
SET NOCOUNT ON;
BEGIN

UPDATE pokequeue.[requests]
	SET [active] = 0
where id = @id AND [active] != 0;

IF @@ROWCOUNT > 0
	SELECT 1 AS response;
ELSE
	SELECT 0 AS response;

END;

EXEC pokequeue.delete_poke_request 70;

Tarea 2: Enriquecer Reporte con Detalles del Pokémon (40 Puntos)

Worker (Azure Function - Python)

  • Los archivos CSV que contenían como datos relevantes el nombre y la URL de información del Pokemon, ahora han sido actualizados agregando más campos con datos relevantes como hp, ataque, defensa, ataque-especial, defensa-especial, velocidad y un campo donde se guardan varias habilidades.

  • Estos datos han sido obtenidos realizando otro consumo a la PokeAPI por medio de un URL único por cada Pokemon del tipo que se obtuvo.

  • Las funciones que viven en el Azure Functions como servicio “Serverless” han sido actualizadas para poder generar archivos CSV con más contenido.

Datos extendidos


Tarea 3: Reportes con Muestreo Aleatorio (25 Puntos)

Frontend (Next Js)

  • En la UI antes de generar un nuevo reporte se solicita ingresar un número para la cantidad de registros deseados en el CSV del reporte

Campo cantidad

Backend (API FastAPI)

  • Se ha modificado el Endpoint de Backend para la creación de reportes para que se pueda obtener el número de Pokemons.
  • Se ha modificado la base de datos añadiendo un campo de la cantidad de muestras que se desean registrar en el reporte

Modificación BD

Worker (Azure Function - Python)

  • La Function App que hace el proceso Background ha sido modificada para poder obtener el número de registros por reporte, y a partir de ese número filtrar la cantidad de Pokemon que se va a registrar en el reporte.

En este ejemplo se pidieron 20 registros para el reporte:

Reporte 20 registros

En la UI se ha agregado el campo de la cantidad de registros en el reporte:

Cantidad en UI


Tecnologías utilizadas:


>