Rescatando un Proyecto

Javier Batres
4 min readMay 19, 2021

El año pasado acepté un proyecto antes de que empezará la pandemia y como esperaríamos se puso en pausa y lo retomamos en noviembre 2020. Mi rol era la aplicación móvil desarrollada con Flutter para iOS y Android. Esta aplicación tenía su diseño listo y se esperaba que el backend lo estuviera.

Mi trabajo inicial

Lamentablemente cuando empezamos a darle lógica a la aplicación nos dimos cuenta de las faltas en el backend. Fuimos lentamente tratando de hacer que funcionara hasta que un nuevo PM se involucró y logro acelerar las cosas. El desarrollador de backend lamentablemente es en mi opinión irresponsable y parte del porqué aún hay gente que nos ve mal a los profesionales de IT.

El tiempo paso y logramos completar la aplicación móvil en aproximadamente 2 meses. Realmente es un proyecto que me enorgullece y me gusta mucho el como quedo el código del mismo. Esta aplicación se desarrolló con el patrón BLOC utilizando una arquitectura CLEAN algo customizada.

La arquitectura o distribución de carpetas es la siguiente:

Lamentablemente por algunos acuerdos de confidencialidad (NDA) no me encuentro en libertad de comentar más detalles sobre la aplicación en sí.

Y después

Cuando había terminado la aplicación lamentablemente el trabajador que realizo el backend y estaba trabajando una aplicación web decidió renunciar y dejo el proyecto a la deriva. Ese fue el momento en que la empresa me pregunto si podría tomar estas otras dos piezas del proyecto y después de algunas negociaciones decidimos tomarlos con otro compañero.

La idea que planteamos fue básicamente rehacer ambas partes del proyecto la web y el backend. Ahora bien en el caso de backend tuvimos que dejar lo que ya se había implementado en la aplicación móvil para no tener que regresar a revisar todos los endpoints y hacer cambios.

Lo Nuevo

Una vez que empezamos los proyectos y encontramos los huesos dejados por el anterior empleado decidimos contactar con la empresa para dar nuestra recomendación la cual como dije fue rehacer la aplicación web y hacer un nuevo backend para esta aplicación web y algunas cosas que le hacían falta a la aplicación móvil.

Para estos nuevos proyectos decidimos usar ReactJS como frontend web y NestJS como nuestro backend. En esta ocasión solo les podré contar sobre el backend que yo realice

Usando NestJS

Nest es un poderoso framework de Node.js basado en express y que utiliza TypeScript. Es algo muy parecido a Angular pero para el backend. Nos permite utilizar anotaciones para definir el tipo de endpoint que deseamos. Igual es increíblemente fácil implementar la autenticación con múltiples modalidades como JWT.

Durante el proceso se implementó el uso de TypeORM para conectarnos a la base de datos MySQL que usamos permitiéndonos modelar los datos de forma estándar y logrando uniformidad en las respuestas JSON.

NestJS +

Empezando en el mundo de este framework me di cuenta de lo extremadamente poderoso que es. Imagina que desde el mismo código puedes implementar de una forma muy fácil característica que en proyectos con otras tecnologías necesitan un proceso especial. Algunas de estas son:

  • Swagger Este es un servicio que nos permite exponer los endpoints en el ambiente de desarrollo para poder hacer pruebas directas sin el uso de una herramienta tercera como postman. Es increíble que este framework tenga algo así “out of the box” (https://docs.nestjs.com/openapi/introduction).
  • Cron Jobs Estos son procesos que se ejecutan cada cierto periodo de tiempo en un servidor. Usualmente se definen por medio de bash scripts que nos permiten hablar directamente a un servidor GNU Linux o bien a la base Unix. Estos procesos en Nest son tan fáciles como agregar una notación con una CronExpression que define el cuando se debe ejecutar.
  • NodeMailer El envío de correos electrónicos es una necesidad básica en las aplicaciones de hoy en día. En este caso la implementación es muy rápida y solo necesitamos importar el módulo con la configuración SMTP necesaria y podemos definir el manejador de plantillas. En mi caso usé el manejador de HandleBars para poder crear plantillas en html que nos permitan reemplazar valores rápidamente. Lo increíble de esto es lo simple que fue gracias a una solución del mismo framework llamada @nestjs-modules/mailer
  • Socket IO Esto suele ser un dolor de cabeza en los proyectos, pero es una funcionalidad cada vez más deseada ya nos permite implementar soluciones con comunicación cliente, servidor en tiempo real. Sin embargo en este caso es simple implementarlo y poder enviar los datos al cliente de forma continua (https://docs.nestjs.com/websockets/gateways#gateways).

Firebase Cloud Messaging

Parte de lo que hacia falta implementar para la aplicación móvil era el envío de notificaciones push las cuales en este caso tratamos con el servicio de Firebase Cloud Messaging o FCM. La aplicación ya estaba lista y solo fue necesario empujar el mensaje por medio de los topics o temas que previamente se habían establecido.

--

--

Javier Batres

I have 27 years and almost 9developing software professionally. Specialized on web and mobile. Google Developer, Tech Speaker and Writer.