Un pequeño restaurante de hamburguesas, que está creciendo, necesita un sistema a través del cual puedan tomar pedidos usando una tablet, y enviarlos a la cocina para que se preparen ordenada y eficientemente.
Este proyecto tiene dos áreas: interfaz web (cliente) y API (servidor). Nuestra clienta nos ha solicitado desarrollar la API que se puede integrar con la interfaz, que otro equipo de desarrolladoras está trabajando simultáneamente.
El objetivo principal de la API es otorgar la información necesaria de las consultas sobre pedidos, productos y usuarios, tenirndo en consideración la autenticación con tokens de autenticación y usando middleware que proporciona el manejo de la autenticación de los usuarios.
Se proporciona un link a la documentación que especifica el comportamiento esperado de la API que expondremos por HTTP.
La API se creo usando NodeJS, Express, MongoDB, MVC, JWT.
El diagrama del esquema del proyecto.
# Corre pruebas e2e sobre instancia local. Esto levanta la aplicación con npm
# start y corre los tests contra la URL de esta instancia (por defecto
# http://127.0.0.1:8080).
npm run test:e2e
# Corre pruebas e2e sobre URL remota
REMOTE_URL=<TODO: poner URL> npm run test:e2e
Las pruebas end-to-end ya están completas en el boilerplate, así que puedes usarlas como guía de implementación y checklist de completitud.
Según lo establecido por la documentación entregada, la API debe exponer los siguientes endpoints:
GET /
POST /auth
GET /users
GET /users/:uid
POST /users
PUT /users/:uid
DELETE /users/:uid
GET /products
GET /products/:productid
POST /products
PUT /products/:productid
DELETE /products/:productid
GET /orders
GET /orders/:orderId
POST /orders
PUT /orders/:orderId
DELETE /orders/:orderId
La aplicación usa las siguientes variables de entorno:
PORT
: Si no se ha especificado un puerto como argumento de línea de comando, podemos usar la variable de entornoPORT
para especificar el puerto. Valor por defecto8080
.DB_URL
: El string de conexión de MongoDB. Cuando ejecutemos la aplicación en nuestra computadora (en entorno de desarrollo), podemos usar el una base de datos local, pero en producción deberemos utilizar las instancias configuradas condocker-compose
(mas sobre esto en la siguiente sección de Deployment)JWT_SECRET
: Nuestra aplicación implementa autenticación usando JWT (JSON Web Tokens). Para poder firmar (cifrar) y verificar (descifrar) los tokens, nuestra aplicación necesita un secreto. En local puedes usar el valor por defecto (xxxxxxxx
), pero es muy importante que uses un secreto de verdad en producción.ADMIN_EMAIL
: Opcionalmente podemos especificar un email y password para el usuario admin (root). Si estos detalles están presentes la aplicación se asegurará que exista el usuario y que tenga permisos de administrador. Valor por defectoadmin@localhost
.ADMIN_PASSWORD
: Si hemos especificado unADMIN_EMAIL
, debemos pasar también una contraseña para el usuario admin. Valor por defecto:changeme
.