Diario de Python | #5. Proyecto: Color Choice
Tags: python, devjournal, spanish
Published: 2023-02-02 00:48:04

En el [artículo anterior](https://dev.to/maxwellnewage/diario-de-python-4-probando-fastapi-para-desarrollar-apis-2hg7) estuve hablando acerca de mi investigación sobre [FastAPI](https://fastapi.tiangolo.com/), en la cual armé un repositorio con una API funcional de gestión de pedidos de una pizzería.

Esto lo hice siguiendo un tutorial: fue fundamental para introducir el uso de las características más importantes a la hora de armar una API, pero no hay desafío porque ya estaba todo armado.

Sí quizá puedo considerar que reescribir varias partes del código en el tutorial fue un reto; pero incluso así sigue sin ser un proyecto propio.

## Es hora de despegar
Dado que ya aprendí las bases, ahora toca crear mi propio proyecto. Se me ocurrió una idea simple, pero que puede resultar muy nutritiva a la hora de recopilar datos.

Se trata de un selector de colores. Si, se que suena la idea más tonta del mundo, pero no te vayas todavía, dejame profundizar en el asunto.

## El draft
Todo proyecto empieza con un dibujo mal hecho, así que mientras escribo este artículo (así de profesional soy), voy a tomarme un momento para armar un draft de la aplicación web:

![Draft](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kn0uet5dozwxcid9kd03.png)

> Gracias [AutoDraw](https://www.autodraw.com/) por dejarme crear este horror cósmico 🌟

Cuando el usuario ingrese a la web, va a encontrar una botonera muy sencilla de 4 colores. Debe seleccionar uno y luego podrá acceder al total de colores que eligieron los otros.

## ¿Eso es todo?
En cuestión de uso del sitio, sí. La parte interesante viene en todo lo que va detrás y como vamos a trabajar con esa información.

En principio voy a armar una API que trabaje con el flujo de este sitio:
- Cuando el usuario entra, debe registrarse con un login social (probablemente solo ponga el de Google) porque no quiero que un mismo usuario pueda votar un color todas las veces que quiera.
- El mismo login es un registro, por lo cual si se acaba la sesión (pensaba hacerla de 30 minutos como máximo), puede volver a ingresar.
- Se persisten las opciones de color en una tabla muy simple con un contabilizador. La parte técnica interesante será crear un par de fake users y poner a prueba esto sin tener que usar mi propio usuario.
- Luego del voto, la API devolverá (cada 30 segundos) el resultado total de los colores elegidos. Quizá contemple la idea de usar algún formato numérico si veo que los votos superan los diez mil.

La parte web estoy pensando hacerla en React, el cual considero el framework perfecto para esto dado su buena interacción con FastAPI en las solicitudes rápidas y ligeras respuestas.

## ¡Quiero ver más estadísticas!
La idea es también llevar todo esto a gráficos: no solo voy a tener votos por color, sino que también van a registrarse las fechas emitidas. Esto implica que podemos hacer gráficas basadas en timelines entre otras cositas interesantes.

Quizá incluso empiece a detectar eventos de decisión, como por ejemplo cuánto tiempo tarda cada usuario en votar un color. Las posibilidades son inmensas, y quiero explorarlas a fondo.

## ¿Vas a compartirlo?
¡Por supuesto! Mi idea es compartir la experiencia con ustedes así como también el código que genere. Voy a armar un repositorio en mi cuenta de [GitHub](https://github.com/maxwellnewage/), el cual va a mantenerse actualizado con los siguientes artículos.

## ¿Puedo participar del proyecto?
Si tenés ganas, tenes la posibilidad de hacer un fork del repositorio y armar tu propia versión. Si tu idea en cambio es sugerir cosas para este proyecto, siempre podés mandarme un comentario por aca, por [LinkedIn](https://www.linkedin.com/in/maximilianoburgos/) o [Twitter](https://twitter.com/maxwellnewage).

## ¿Cómo sigue esto?
En estos días voy a sentarme a armar el repositorio, y empezar a trabajar la parte backend. De hecho ahora que lo pienso, necesitamos dos: uno para la API y otro para el sitio web.

Soy consciente de que podría desarrollar todo esto en Django y tener un único proyecto, pero mi idea es poder llevarme la API a todos los frontends que pueda. Por ejemplo, quizá arme una app en Android que incluso envíe notificaciones push cuando en algún momento del día la actividad de votación sea más intensa.

Por otro lado, tengo que aprender React; por lo cual quizá varios artículos sean de análisis y elecciones que haga antes de embarcarme en la versión final del proyecto.

Espero que les apasione esta idea tanto como a mí, y los espero en los siguientes artículos. 😉👋