Full Development

NEXTGEN
MASTERQUIZZ

DESARROLLO
FULL-STACK
DE APLICACIÓN WEB

nextgen masterquizz laptop mockup 1, index application page
nextgen masterquizz laptop mockup 1, index application page

1. Descripción

Next Gen Master Quiz es una aplicación web de trivia full-stack que desarrollé como proyecto final para el curso de Programación Python de Tokio Digital School.

Este proyecto fue todo un reto para mejorar mis habilidades en el desarrollo tanto de front-end como de back-end, combinando tecnologías modernas y eficientes para crear un juego de trivia que recopilara preguntas de una página web, las almacenara en una base de datos y después las devolviera de manera aleatoria al jugador/usuario en la aplicación, ofreciendo una puntuación final de 1 a 10.

2. Tecnologías

El servidor back-end de la aplicación se desarrolló utilizando Python y el framework Flask. Esta elección permitió crear una API RESTful. Se estructuró de manera modular, separando las diferentes funcionalidades en módulos específicos:

  1. Bot de Scraping (scraper_bot.py): Implementé un bot de scraping utilizando Selenium para recopilar preguntas y respuestas de trivia de la fuente web «https://youengage.me/blog/trivia-questions/«. Este bot automatiza la extracción de datos y se encarga de enviar las preguntas y las respuestas -correctas e incorrectas- a una base de datos MySQL.
  2. Módulo de Autenticación (auth_module.py): Desarrollé un sistema de autenticación utilizando JSON Web Tokens (JWT). Este módulo maneja el registro de usuarios, inicio de sesión, y gestión de sesiones, garantizando la seguridad de la aplicación.
  3. Módulo de Trivia (trivia_module.py): Este módulo contiene la lógica central del juego, incluyendo la generación de pruebas de trivia aleatorias y categorizadas, así como la verificación de respuestas de los usuarios.
  4. Conexión a Base de Datos (db_mysql.py): Implementé la conexión y gestión de la base de datos MySQL, asegurando un almacenamiento eficiente y seguro de los datos de usuarios y preguntas de trivia.
  5. Modelos de Datos (models.py): Definí las clases de modelo para representar las entidades principales del sistema -categorías y preguntas/respuestas-.

El servidor Flask se encarga de manejar las rutas de la API, procesando las solicitudes del cliente y devolviendo las respuestas adecuadas. La estructura modular del back-end facilita el mantenimiento y la escalabilidad del proyecto para poder seguir incorporando en un futuro otras funciones o módulos para la aplicación.

3. Desarrollo Back-end

Desarrollamos la arquitectura de la información y estructuramos la página web favoreciendo la navegación fluida de los usuarios, resolviendo las principales cuestiones que pudieran plantear.

Queríamos enfocamos en una navegación intuitiva y en resaltar los puntos fuertes del espacio de coworking, relacionados con su localización geográfica. Paralelamente, desarrollamos los aspectos principales que irían a definir la esencia de la marca hub36: sus tipografías, colores, guía de estilo, ilustraciones y tono de la comunicación.

A continuación comparto las «Foundations» que se diseñaron en Figma al inicio del proyecto, para establecer una base de diseño desde la que partimos y fuimos creando y evolucionando en el diseño.

4. Desarrollo Front-end

Angular en su versión 16.2.4, aprovechando su potencia para crear una interfaz de usuario dinámica y receptiva. La aplicación se estructuró de la siguiente manera:

  1. Componentes: Desarrollé varios componentes reutilizables, como NavComponent, FooterComponent, y PopUpComponent, para mantener una interfaz coherente y fácil de mantener.
  2. Servicios: Implementé servicios como AuthService y MyTriviaService para manejar la lógica de negocio y la comunicación con el back-end, siguiendo el principio de responsabilidad única.
  3. Guards: Utilicé guardias de ruta (AuthGuard) para proteger ciertas rutas y asegurar que solo los usuarios autenticados puedan acceder a ellas. También implementé un interceptor (AuthInterceptor) para agregar automáticamente el token de autenticación a las solicitudes HTTP salientes.
  4. Enrutamiento: Configuré el enrutamiento de la aplicación para permitir la navegación de los usuarios a través de páginas distintas.
  5. Formularios: Utilicé formularios reactivos de Angular para el manejo eficiente de la entrada de datos del usuario, especialmente en los procesos de registro, inicio de sesión y respuesta a las preguntas de trivia.

5. Flujo de la Aplicación

La integración entre el front-end y el back-end se realizó a través de llamadas HTTP -módulo HttpClient de Angular-. El flujo típico de la aplicación sería el siguiente:

  1. El usuario accede a la página de inicio (HomeComponent).
  2. Debe obligatoriamente registrarse o iniciar sesión a través del AuthWrapperComponent, para poder acceder tanto a los modelos de trivia como a ver el «poll» o la clasificación donde están las puntuaciones de todos los jugadores.
  3. Una vez autenticado, el usuario puede acceder a las pruebas de trivia (TriviaWrapperComponent). La autenticación va acompañada de un token de verificación -JWT-.
  4. El usuario puede elegir entre una prueba aleatoria o categorizada.
  5. El componente TriviaComponent muestra las preguntas y recopila las respuestas del usuario.
  6. Al finalizar la prueba, se envían las respuestas al servidor para su verificación y se muestra la puntuación obtenida al jugador, que además queda regisrtada en su puntuación general para la clasificación en el «poll» frente al resto de usuarios/jugadores.

6. Desafios

Uno de los desafíos fue la gestión del estado de la aplicación en el front-end, puesto que era la primera vez que me enfrentaba a crear una aplicación con Angular. Utilicé observables para manejar el estado y el flujo de datos asíncrono y mantener la aplicación reactiva y eficiente.

Otro desafío fue la decisión de elegir Flask o Django para manejar el back-end de la aplicación. Finalmente, me decidí por Flask porque encontré mayor documentación referente o relacionada al proyecto que quería producir y me resultaba, en lo técnico, un framework más sencillo, amigable y con una curva de aprendizaje menos pronunciada, puesto que también contaba con la curva de aprendizaje por el lado del front-end.

Para concluir: Next Gen Master Quiz cumple con los requisitos del curso de programación Python de Tokio Digital School y además ha resultado ser un reto de desarrollo técnico con diversas tecnologías, para servir como base en mi futuro profesional.

/// DISEÑO Y DESARROLLO WEB

Descubre otros proyectos
de la rana

Compartiendo conocimientos