Decidimos utilizar Node.js como servidor para nuestra aplicación. La razón principal es por la popularidad de Javascript y la facilidad de manejar documentos JSON y peticiones HTTP en este entorno. Agregamos el framework Express.js que nos ayudaba a simplificar algunas tareas. Es también muy popular y fácil de instalar.
El programa es ejecutado de forma local en el puerto 3000.
## Base de datos
- Usuarios: Los usuarios son guardados en la base de datos MongoDB. Escogimos MongoDB por su popularidad. El email, aunque es único, decidimos guardarlo en un campo separado, y no como id, ya que si el sistema creciera, al usuario podría interesarle cambiar su email. La visualización de los usuarios la realizamos en MongoDB Compass.
- Comentarios: Los comentarios son guardados en la base de datos DynamoDB. Elegimos DynamoDB por su servicio en la nube. Los comentarios son guardados con un id único que creamos con una librería Javascript para generar uuid. Los comentarios son identificados por su id y el usuario autor del comentario. Lo más coherente en una base de datos SQL para buscar los comentarios por usuario es agregar un índice a la tabla Comentarios para identificar usuarios. Luego se busca con el índice el usuario y se obtienen sus comentarios. En Dynamo esto no es necesario, ya que su clave puede componerse de dos elementos: Clave de partición y Clave de ordenación. Amazon DynamoDB usa el valor de clave de partición como dato de entrada a una función hash interna. El resultado de la función resuelve la partición (almacenamiento físico interno) donde se guardará el elemento. Por lo que utilizar la clave de partición como el usuario a buscar, y la clave de ordenación para identificar el comentario parecía la manera correcta de hacerlo.
## Códigos de estado:
- Cuando se quiere agregar un usuario que ya existe, retorna 409.
- Cuando no se encuentra el usuario o el comentario, retorna 404.
- Cuando ocurre otro error, retorna 500.
- Si se pueden obtener, modificar, o crear los datos correctamente, retorna 200.
## Pruebas
Las pruebas las realizamos con Postman. Además de definir un conjunto de request, podemos escribir pruebas y determinar qué salidas debería tener un request, ordenarlos, y mucho más.