Desarrolla una aplicación de interfaz de usuario que permita a los usuarios abrir una nueva cuenta bancaria y realizar transacciones bancarias como depósitos y retiros.
- La aplicación debe permitir a los usuarios introducir los detalles de su cuenta, como el nombre, el número de cuenta y el saldo inicial.
- Los usuarios deben poder realizar depósitos y retiros, introduciendo el monto de la transacción y seleccionando el tipo de transacción.
- La aplicación debe mostrar el saldo actualizado de la cuenta después de cada transacción.
- Implementa pruebas unitarias con Jest y asegúrate de que la cobertura de las pruebas sea completa.
- Incluye un archivo README que explique cómo ejecutar el código y las pruebas
Desarrolla una API con los siguientes endpoints:
- POST /accounts: Crea una nueva cuenta bancaria. Este endpoint debería aceptar detalles de la cuenta como el nombre y el número de cuenta, y devolver un ID de cuenta.
- POST /transactions: Realiza una transacción bancaria. Este endpoint debería aceptar detalles de la transacción como el ID de la cuenta, el tipo de transacción (depósito o retiro) y el monto de la transacción. Además, implementa un middleware que registre en la consola cada vez que se realiza un depósito de más de 10,000 US$. Implementa pruebas unitarias con Jest y asegúrate de que la cobertura de las pruebas sea completa. Incluye un archivo README que explique cómo ejecutar el código y las pruebas.
Se darán puntos extra por:
- Aplicar principios de DDD (Domain-Driven Design).
- Implementar Event Sourcing.
- Seguir las prácticas de Clean Code y Clean Architecture. Por favor, ten en cuenta que el código que entregues puede estar incompleto en cuanto a funcionalidad, pero siempre debe ser capaz de compilar y ejecutar las pruebas. Aclaraciones: Para facilitar el ejercicio, no es requerido implementar una base de datos, puede utilizar variables en memoria para el backend
Instalar NodeJs version 16.x or superior
Para instalar y testear el frontend se pueden utilizar los siguientes comandos:
npm install
npm run dev
Para instalar y testear el backend se pueden utilizar los siguientes comandos:
npm install
npm run build
npm run seed - para crear el archivo de base de datos y las tablas
npm run test
npm run start - asegurate de haber ejecutado el comando build antes
Para probar los endpoints se puede utilizar el swagger el cual se encuentra en la url: http://localhost:3001/api-docs/public/ o con el archivo de Postman BankAppAssignment.postman_collection.json
Dado que poseo mas experiencia como desarrollador backend para este proyecto, he intentado centrarme mas en este aspecto del proyecto. Para empezar cree la base de datos para el proyecto, decidi usar SQLite ya qye no requiere instalacion o montar un servidor especifico; despues, cree los controladores y servicios para el proyecto y por ultimo los tests en jest, libreria que tuve que aprender a utilizar ya que es estoy mas acostumbrado a utilizar otras librerias como Mocha Chai Sinon y NYC. Luego continue testeando y corrigiendo bugs del backend hasta que quede satisfecho.
Para una muestra de como implementaria algunas de las mejoras mencionadas como seguridad o checkeo de coverage de tests pueden dirigirse a este repositorio (https://github.com/ajvg94/finance-tracker-app).
En cuanto a mejoras para el backend existen muchas, desde agregar mas endpoints para tanto para las transacciones como para las cuentas (me limite a solo los endpoints solicitados por el ejercicio), asi como tambien seguridad mediante el uso de librerias como JWT, Bcrypt y Passport por ejemplo, la implementacion de cache con redis en caso de ser necesario. Tambien quiero mencionar que se podria implmentar un checkeo del coverage de los tests mediante librerias como NYC o alguna otra que sea compatible con Jest.
Para el front end cree los componentes necesarios para poder mandar los datos al backend y sus respectivos tests. Como mencione anteriormente todavia me encuentro aprendiendo y mejorando con React por lo cual no implemente mas funcionalidades aparte de las basicas solicitadas y tampoco implemente las pruebas unitarias para los componentes. Como mejoras a futuro se puede mejorar tanto el aspecto de los componentes asi como tambien crear nuevos componentes para agregar mas funcionalidades como el login, un dashboard, historial de transacciones, etc; asi como tambien agregar las respectivas pruebas unitarias.
Quedo atento a cualquier duda o sugerencia.
Muchas gracias.