- 1. Resumen del proyecto 📄
- 2. Requerimientos del cliente 💁
- 3. Recursos y documentación 📑
- 4. Integración con Docker 🐋
- 5. Consideraciones ❕
- 6. Despliegue 🚀
- 7. Testing 🤡
- 8. Organización 📆
- 9. Criterios de aceptación ☑️
- 10. Objetivos de aprendizaje 👩🎓
Esta API es la segunda parte de nuestro proyecto final en el bootcamp de Desarrollo Web en Laboratoria y está pensado para ser utilizado como back-end en integración con la interfaz implementada en el proyecto anterior llamada (Burger Queen API Client).
Esta API ha sido creada para un pequeño restaurante, que necesita manejar y amdinistrar sus productos y pedidos a través de un dispositivo tablet. Para esto se utiliza una base de datos y un servidor que recibirá y enviará información de usuarios, productos y órdenes según el usuario necesite.
Al inicializar el servidor, este verificará si existe un usuario administrador, si esto no es así, creará uno con las credenciales por defecto. Cada usuario tendrá un rol, que puede ser "admin", "waiter" o "chef" y dependiendo de su rol, podrá interactuar de distintas formas con la base de datos.
La clienta nos ha dado un link a la documentación que especifica el comportamiento esperado de la API que expondremos por HTTP. Ahí se pueden encontrar todos los detalles de qué endpoints debe implementar la aplicación, qué parámetros esperan, qué deben responder, etc.
PENDING...
Nuestro proyecto tiene la configuración necesaria para ser ejecutado con Docker,
utilizando el comando docker compose up
.
Esto correra un multicontenedor que contiene dos imágenes, una para el servicio
de la database de MongoDB y otra para el servicio de Node.
La API expone los siguientes endpoints:
-
GET /
-
POST /auth
-
GET /users
-
GET /users/:uid
-
POST /users
-
PATCH /users/:uid
-
DELETE /users/:uid
-
GET /products
-
GET /products/:productid
-
POST /products
-
PATCH /products/:productid
-
DELETE /products/:productid
-
GET /orders
-
GET /orders/:orderId
-
POST /orders
-
PATCH /orders/:orderId
-
DELETE /orders/:orderId
La API se puede ejecutar con el comando npm start
Esto se encargará de cargar nuestra aplicación node.
Opcionalmente, podemos especificar el puerto en el que debe arrancar la aplicación pasando un
argumento a la hora de invocar nuestro programa:
# Arranca la aplicación en el puerto 8888 usando npm
npm start 8888
El proyecto 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.JWT_SECRET
: Nuestra aplicación implementa autenticación usando JWT (JSON Web Tokens). Para poder usar JWT es necesario este "secreto".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
.
El despliegue de la API fue realizado con vercel.
Se puede acceder a él desde el enlace: https://bq-api.vercel.app/
La API fue testeada con pruebas unitarias y end-to-end (e2e). Los resultados son los siguientes:
PENDING...
A continuación, presentamos los resultados de las pruebas E2E.
Para nuestra organización y planificación utilizamos la herramienta Trello. A continuación una imágen de nuestras tareas y cómo estas fueron distribuidas en cada sprint.
Todos los criterios de aceptación mínimos del proyecto fueron logrados. A continuación el detalle de cada uno:
- Instalar y usar módulos con npm
- Configuración de package.json
- Configuración de npm-scripts
- Pruebas unitarias (unit tests)
PENDING
- Pruebas asíncronas
PENDING
- Uso de mocks y espías
PENDING
- Pruebas de integración (end-to-end)
- Módulos de ECMAScript (ES Modules)
- Módulos de CommonJS
- Uso de linter (ESLINT)
- Uso de identificadores descriptivos (Nomenclatura y Semántica)
- Git: Instalación y configuración
- Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)
- Git: Integración de cambios entre ramas (branch, checkout, fetch, merge, reset, rebase, tag)
- GitHub: Creación de cuenta y repos, configuración de llaves SSH
- GitHub: Despliegue con GitHub Pages
- GitHub: Colaboración en Github (branches | forks | pull requests | code review | tags)
- GitHub: Organización en Github (projects | issues | labels | milestones | releases)
- Manejo de rutas
- Uso y creación de middleware
- Consulta o petición (request) y respuesta (response).
- Cabeceras (headers)
- Cuerpo (body)
- Verbos HTTP
- Códigos de status de HTTP
- Encodings y JSON
- CORS (Cross-Origin Resource Sharing)
- JWT (JSON Web Token)
- Almacenamiento y acceso de contraseñas
- Variables de entorno
- Contenedores (Docker)
- Docker compose
- Cloud Functions
- Operaciones CRUD (Create-Read-Update-Delete)
- Modelos y esquemas de datos
- Respaldo y restauración (backup/restore)
- Modelado de datos
- Conexión