- Introducción
- Aspectos más Desafiantes
- Prerrequisitos
- Biblioteca de Pruebas
- Comandos de Docker
- Mejoras
Este proyecto implementa un servicio backend para SnapMsg, una plataforma para crear y compartir mensajes cortos. El servicio proporciona una API RESTlike para publicar y recuperar snaps, con persistencia de datos en MongoDB y manejo de errores siguiendo el estándar RFC 7807.
Trabajar con mongodb y los tests e2e porque nunca lo había hecho antes.
MongoDB decidí usarlo para explorar esta nueva tecnología y pensando en que el tp grupal va a ser twitter entonces se adapta mejor una base no relacional, de mongo lo que más me costó fue el uso de los Modelos.
Con respecto a los tests e2e me llevó bastante tiempo porque me costó mockear el modelo de mongo y hacer que los test pasen. Estoy más acostumbrada a hacer tests unitarios.
- Node.js v18.x o posterior
- npm v9.x o posterior
- Docker v20.x o posterior
- Docker Compose v1.29.x o posterior
Este proyecto utiliza Jest para las pruebas. Puede encontrar la documentación de Jest aquí: Documentación de Jest También se utilizó supertest para los test de integración. Puede encontrar la documentación de supertest aquí: Documentación de supertest
docker build -t snapmsg-backend .
docker-compose up --build -d
docker-compose up -d mongodb
npm i
npm run dev
Dentro del npm run dev se levanta la base de datos con docker-compose y se ejecuta el servicio con nodemon en nuestro host.
npm run test
Al igual que en el desarrollo en local, se levanta la base de datos con docker-compose y se ejecutan los tests.
Empecé con node.js y TS porque es lo que más conozco y me siento más cómoda. Luego decidí usar express porque es un framework que ya he usado y me resulta fácil de usar. Para la base de datos decidí usar mongo por lo explicado anteriormente. Para la app empecé con una estructura básica de routes y controllers solamente, luego pensé en agregar la capa de servicios y repositorios para separar responsabilidades, pero al ser una app tan pequeña decidí saltarme los servicios y llamar directamente a los repositorios desde los controllers (esto se que no es lo mejor pero para esta app tan pequeña me pareció suficiente).
En cuanto a docker fuí directamente con docker-compose para levantar la base de datos y la app juntas.
- Agregar tests unitarios
- Agregar servicios para separar responsabilidades