AhorrADAs
⚙️ Consigna
En este proyecto vas a crear una aplicación que permita llevar un registro de los gastos realizados y de los ingresos obtenidos. Aplicarás lo aprendido para estructurar y almacenar la información compleja de tu aplicación, y desarrollarás funcionalidades que posibiliten manipularla y realizar operaciones esenciales a la hora de trabajar con datos.
Para este proyecto trabajarás en equipo siguiendo prácticas que se utilizan profesionalmente para desarrollar colaborativamente
👀 Ejemplo
Puedes ver un ejemplo funcional del proyecto siguiendo este link.
💬 Comentarios
A este proyecto se le suma un nuevo grado de complejidad: tenemos que trabajar y operar con datos, y tenemos que mostrarlos y poder interactuar con ellos. No solo tenemos que maquetar las pantallas, sino que también debemos asegurarnos que todo el manejo del DOM funcione correctamente y de que los datos mantengan su consistencia entre operación y operaci´ón.
Por eso, y de la misma forma que el proyecto anterior, es recomendable ir haciendo las funcionalidades una por una. Al empezar una nueva funcionalidad, deberíamos crear una nueva brach
y ponerle un nombre adecuado (por ejemplo, vista-balance
, editar-categoria
, filtros-busqueda
), en esa branch
ocuparnos única y exclusivamente de esa funcionalidad, y una vez terminada, mergearla a main
y continuar con la siguiente funcionalidad, repetiendo el proceso.
Si tenemos que mejorar o arreglar una funcionalidad ya agregada, deberíamos hacer una nueva branch para dicho fix o refactor, y nombrarla adecuadamente (por ejemplo, refactor-filtros
, fix-agrega-operacion
), y una vez finalizada la mejora o correción, mergearla a main
.
Además, es sumamente importante trabajar con el DOM y con los datos por separado. Primero, porque son dominios de problema diferentes: cómo operar con datos por un lado, y cómo visualizarlos por el otro. Segundo, porque permite concentrarnos específicamente en una parte del problema, ignorando la otra parte o pudiendo trabajar en paralelo. Por lo tanto, ambos aspectos deberían funcionar correctamente de forma independiente, es decir, debería poder navegar por la aplicaci´ón por más que no haya ningún dato real, y debería poder trabajar con los datos (crearlos, guardarlos, editarlos, modificarlos) sin tener que hacer uso de la interfaz (llamando a las funciones por consola).
Esto lo podemos lograr si nos aplicamos a los criterios de funciones pura a la hora de operar los datos. Aquellas funciones que manipulen la información no deben modificar el DOM, ni llamar a ninguna otra función que lo haga. Y por otro lado, las que sí trabajan con el DOM, no deben manipular los datos, sino llamar a las funciones que lo hacen de forma pura.
👍 Criterios de aceptación
Los requisitos mínimos para que el proyecto sea considerado para la entrega son:
- Debe respetar el diseño general dado. Pueden modificarse a gusto colores, fondo, fuentes e íconos
- Debe respetar las interacciones y flujo de pantallas
- Debe ser responsive
- Debe cumplir con las funcionalidades principales listadas en la sección siguiente
- Debe hacer hacer uso de un framework CSS (sólo deben agregarse estilos propios si no hay forma de lograrlo con el framework)
- Debe estar deployado y ser accesible desde una dirección web
- No se debe trabajar en la rama
main
. Enmain
sólo van a mergearse las demás ramas, por lo que cadacommit
demain
debería ser elmerge
de unabranch
de una funcionalidad terminada - Cada funcionalidad que se agregue debe hacerse mediante un PR (Pull Request)
🎛 Funcionalidades principales
- Se debe poder agregar, editar y eliminar operaciones
- Se debe poder agregar, editar y eliminar categorías
- Cada operación debe contar con:
- Descripción
- Monto
- Tipo de operación (gasto o ganancia)
- Categoría a la que pertenece
- Fecha de realización
- Cada categoría debe contar con un nombre
- Al eliminar una categoría, se deben eliminar todas las operaciones asociadas a ella
- Se debe poder filtrar las operaciones realizadas por:
- Tipo de operación (gasto, ganancia o ambas)
- Categoría a la que pertenece (una en específico o cualquiera)
- Fecha de realización (a partir de la fecha seleccionada)
- Se debe poder ordernar las operaciones realizadas por:
- Fecha de realización (más y menos reciente)
- Monto (mayor y menor)
- Descripción (en orden alfabético creciente y decreciente)
- Se debe poder obtener los siguientes reportes:
- Un resumen con:
- Categoría con mayor ganancia
- Categoría con mayor gasto
- Categoría con mayor balance
- Mes con mayor ganancia
- Mes con mayor gasto
- Totales (gastos, ganancias y balances) por categoría
- Totales (gastos, ganancias y balances) por mes
- Un resumen con:
- Se deben guardar los datos en el almacenamiento local del navegador
📝 Criterios de evaluación
- Menos de 6 (No aprobado)
- 6 (Aprobado)
- Respeta la consigna
- Estructura correcta de documento HTML
- Respeta el diseño dado
- Respeta el funcionamiento
- Respeta el flujo de pantallas
- Responsive funciona correctamente
- 7 (Bueno)
- Código bien indentado
- Buenos nombres de funciones y variables
- Los datos mantienen su integridad
- 8 (Muy bueno)
- Funciones pequeñas
- Nombres de branchs adecuados
- Lógica clara y simple
- Buen uso estructuras de datos (arrays y objetos)
- Buen uso de estructuras de control (condicionales y bucles)
- 9 (Muy bueno)
- Uso de funciones puras para el manejo de datos
- Separación clara de manejo de datos y visualización
- Buen uso de métodos funcionales de array (
map
,filter
,reduce
, etc)
- 10 (Excelente)
- Reutilización de lógica / funciones
- Commits con mensajes adecuados
- Un PR por funcionalidad, fix o mejora
- PRs con buenos títulos
🧰 Recursos
- Bulma - Framework CSS
- Font Awesome - Íconos
- Undraw - Imágenes