- JavaScript (Backend)
 - npm
 - Node.js
 - Nodemon
 - Express
 dotenv (.env)- MongoDB
 - Uso de la API
 - Diagramas
 - Autoras
 
Node JS (https://nodejs.org/es)
Entorno en tiempo de ejecuciónde de JS de código abierto y multiplataforma que perite a los desarrolladores construir aplicaciones de servidor escalables y de alta velocidad.
package.json: archivo que se crea dentro de cada proyecto nodejs. Es clave y no debe eliminarse de la carpeta de cada proyecto que desarrollemos
node_modules se creará cuando comencemos a instalar librerias, frameworks y otras dependencias para utilizar en nuestros proyectos Node.js
Para inicializar el proyecto en la terminal deberemos escribir:
   $ npm init -y
Dependencia que nos ayuda a automatizar la ejecución de nuestra página web y no andar reiniciando el servidor por cada cambio realizado en nuestro proyecto.
- En consola instalamos nodemon
$ npm install nodemon - En package.json modificamos el scrip start y agregamos end
"scripts":{ "start": "node --watch ./ruta_del_server.js", "end": "kill all -9 node" }
 - Luego en consola levantamos la app y listo.
$ npm start 
Es un framework que nos proporciona una amplia gama de funcionalidades para el manejo de rutas, gestión de peticiones y respuestas HTTP, de integración con BD, en nuestro caso MongoDB, y middleware para validar datos, autenticación y seguridad entre otras opciones. Para mayor información por favor visite https://expressjs.com/
- En consola instalamos express
$ npm install express - En el archivo .js escribimos lo siguiente:
const express = require('express'); const app = express(); //Puerto del localhost const PORT = 3000; //Ruta Home app.get('/', (req, res) => { res.send("välkommen"); }); //Middleware para rutas inexistentes app.use((req, res ) => { res.status(404).send("Page Not Found"); }); //Módulo de escucha app.listen(PORT, () => { console.log(`Servidor funcionando en ${PORT}`); });
 
Es un módulo sin dependencias que carga variables de entorno como puertos del servidor, URL de conexión a BDs, claves (passwords, API keys), modo del entorno (desarrollo, produccion, testeo, etc) desde un archivo .env a procces.env y debe estar en el .gitignore
- 
Instalación en consola
$ npm install dotenv - 
En el árbol de archivos, creo el archivo .env en la ruta principal del proyecto
 - 
En el archivo .js escribimos lo siguiente:
const dotenv = require('dotenv'); dotenv.config();
 
- PORT: establecemos el puerto
 - MONGODB_URLSTRING: es donde se guarda la conexion a mongo
 
- Nos logeamos en https://account.mongodb.com/account/login
 - Creamos el proyecto Supermercado.
 - En Compass que previamente instalamos en nuestro Pc generamos nuestra base de datos
 - Conectamos nuestra BD con nuestro cluster.
 - Una vez realizada la conexion agregamos nuestro set de datos
 
Ya en nuestro proyecto instalamos a través de la consola MongoDB Driver
   $ npm install mongodb
| Operador | Método | Descripción | 
|---|---|---|
| .connect() | client.connect() | Nos permite conectarnos al motor de MongoDB | 
| .disconnect() | client.close() | Nos permite desconectarnos del motor de MongoDB | 
| .db() | client.db(database) | Una vez conectados a MongoDB, nos permite seleccionar la base de datos | 
| .collection() | db.collection(collectionName) | Seleccionada a base de datos nos permite elegir con que coleccion trabajar | 
| .find() | db.collection().find(obj) | Busca un documento en la colección actual o devuelve todos los documentos | 
| .findOne() | db.collection().findOne(obj) | Busca un documento en la collección actual, de acuerdo al objeto informado | 
- Ruta principal que devuelve un mensaje de bienvenida
 
    app.get('/', (req, res) => {
        res.status(200).end("🛒 <mensaje> 🛒");
    });- Posibles  respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/ URL principal GET Devuelve 🛒 Bienvenido a APImarket 🛒 200  
- 
Obtenemos la lista completa de productos almacenados en nuestra BDs.
- Conecto la BD
 - Valido la conexión
 - Traigo mi set de datos
 - Devuelvo la lista con los productos
 - Manejo de errores no contemplados
 - Me desconecto de la BDs
 
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/productos URL gral para visualizar todos los productos GET Colección de datos completa 200 http://localhost:3010/producto Ruta inexistente GET La página que busca no existe. 404 http://localhost:3010/productos URL gral para visualizar todos los productos GET No puedo mostrar los productos. 500  
- 
Devuelve un producto especifico según el código enviado como parámetro
- Capturo el parámento  
:cod - Valido que sea un numero mayor o igual a cero
 - Conecto con la BDs
 - Busco el producto con código = 
:cod - Me desconecto de la BDs
 - Si no lo encuentra devuelvo mensaje de error
 - Si lo encuentra devuelvo el producto
 
 - Capturo el parámento  
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/productos/3456 GET Consulta por producto existente Devuelve el documento completo del producto correspondiente 200 http://localhost:3010/productos/5 GET Consulta por producto inexistente Producto inexistente 404 http://localhost:3010/productos/-6 GET Código inválido Código de producto inválido 400 http://localhost:3010/productos/avfr GET Código inválido Código de producto inválido 400  
- 
Devuelve todos los productos cuya categoría coincide (parcial/total) con el valor enviado como parámetro
- Capturo el parámetro 
:cat - Valido que el valor no esté vacío
 - Conecto con la BDs
 - Realizo la busqueda por coincidencia (regex)
 - Devuelvo los productos encontrados
 - Me desconecto de la BDs.
 
 - Capturo el parámetro 
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/categoria/bebidas GET Busca productos por categoría Devuelve los documentos con categoria = "bebidas" 200 http://localhost:3010/categoria/#doble_espacio GET Categoria vacia Categoría invalida 400 http://localhost:3010/categoria/otra GET Categoria inexistente Categoría no encontrada 404  
- 
Devuelve todos los productos cuyo precio sea igual o mayor al valor ingresado por parámetro
 - 
Capturo el parámetro
:precio - 
Valido que el valor sea un numero mayor o igual a 0
 - 
Conecto con la BDs
 - 
Realizo la busqueda con precio mayor o igual al solicitado
 - 
Devuelvo los resultados, si los hay
 - 
Me desconecto de la BDs
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/precio/15 GET Busca precios >= 15 Devuelve los documentos con ese rango de precio 200 http://localhost:3010/precio/-5 GET Precio invalido Precio invalido 400 http://localhost:3010/precio/1500 GET No existen productos con ese precio Precio no encontrado 404  
- 
Crea un nuevo producto/documento en la BDs
 - 
Recibe un
bodycon los datos del prodcuto a agregar - 
Valida el tipo y contenido de los campos
codigo: número positivonombre: texto no vacíoprecio: numero mayor o igual a cerocategoria:texto no vacio
 - 
Verifica si ya existe un producto con el mismo código
 - 
Si pasa las validaciones, lo agrega a la collections Productos
 - 
Body esperado
{ "codigo" : 101, "nombre" : "Yerba Mate", "precio" : 25.6, "categoria" : "Infusiones" }
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/producto POST Alta de un producto Created 201 http://localhost:3010/producto POST Tipos de datos mal formado Tipo o tipos de datos inválidos 400 http://localhost:3010/producto POST Codigo duplicado El código del producto ya existe 409 http://localhost:3010/producto POST Cualquier otro error Error inesperado 500  
- 
Modifica un producto pero hay que pasarle todo el documento completo
 - 
Se recibe el body
 - 
Se validan los datos
codigo: numero, obligatorionombre: string, obligatorioprecio: numero, obligatoriocategoria: string, obligatorio- El codigo que viene por params es el que se busca y se reemplaza
 
 - 
Verifica que el codigo de
paramssea valido - 
Se controla la estructura de body
 - 
Cierro la conexion
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/producto/9087 PUT Modificacion de un producto OK 200 http://localhost:3010/producto/9087 PUT Faltante de informacion en el body Tipo o tipos de datos inválidos o faltan dantos, recuerde que debe ingresar TODA la información del documento 400 http://localhost:3010/producto/007 PUT El codigo buscado no existe El producto a modificar no existe 404 http://localhost:3010/producto/9087 POST Cualquier otro error Error inesperado 500  
- 
Permite modificar parcialente un producto existente en la BDs
 - 
Captura el codigo del producto desde la URL
 - 
Valida que el codigo sea numerico y mayo a cero
 - 
Valida que los datos enviados en el cuerpo de la solicitud sean válidos
 - 
Conecta a la BDs
 - 
Hace la validacion si el producto existe, actualiza o manda mensaje de error
 - 
Cierra la conexion
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/producto/8745 PATCH Modificacion de un precio OK 200 http://localhost:3010/producto/874599 PATCH Producto inexistente El producto a modificar no existe 404 http://localhost:3010/producto/8745 PATCH nombre vacio en el body nombre invalido 400 http://localhost:3010/producto/9087 PATCH Cualquier otro error Error inesperado 500  
- 
Elimina un pproducto de la BDs utilizando su codigo como parámetro
 - 
Se recibe un
:codigode producto por parametro - 
Se valida que sea mayor o igual a cero
 - 
Se hace la conexión con la BDs
 - 
Si existe el
:codigose elimina el mismo - 
Sino se maneja la situacion o error correspondiente
 - 
Se cierra la conexion a la BDS
 - 
Posibles respuestas
URL Método Descripción Resultado esperado Código http://localhost:3010/producto/1198 DELETE Elimino un producto No Content 204 http://localhost:3010/producto/161616 DELETE Codigo inexistente pero valido No se encontro el codigo ingresado 404 http://localhost:3010/producto/avw DELETE Código inválido El formato es erroneo o inváñido 400 http://localhost:3010/producto/error DELETE Error inesperado Se produjo un error al intentar eliminar el productoa 500  
Este diagrama muestra el flujo general para la configuración y ejecución de la API RESTful, desde la instalación de dependencias hasta la definición y escucha de las rutas.
%% Diagrama de flujo 
graph TD
  style A fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style B fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style C fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style D fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style E fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style F fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style G fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style H fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style I fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style J fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style K fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style L fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style M fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style N fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  style O fill:#0d6e36,stroke:#fff,stroke-width:2px,color:#ffffff,font-weight:bold
  A[Inicio] --> B[Instalación de MongoDB Driver + Express.js]
  B --> C[Requerir dotenv y configurar variables de entorno]
  C --> D[Crear archivo mongodb.js con funciones de conexión/desconexión]
  D --> E[Configurar servidor Express y middlewares]
  E --> F[Definir rutas de API]
  F --> G[GET /productos → Obtener todos los productos]
  F --> H[GET /productos/:cod → Buscar por código]
  F --> I[GET /categoria/:cat → Buscar por categoría]
  F --> J[GET /precio/:precio → Buscar por precio]
  F --> K[POST /productos → Crear nuevo producto]
  F --> L[PUT /productos/:cod → Reemplazar producto entero]
  F --> M[PATCH /productos/:cod → Modificar parcialmente]
  F --> N[DELETE /productos/:cod → Eliminar producto]
  N --> O[Middleware 404 y escucha en puerto]
    Este diagrama ilustra la interacción entre cliente, servidor Express y MongoDB para cada petición REST: consulta, inserción, actualización y eliminación.
sequenceDiagram
  participant Cliente
  participant Express
  participant MongoDB
  Cliente->>+Express: GET /productos
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Datos de todos los productos
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Lista de productos
  Cliente->>+Express: GET /productos/:cod
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Buscar por código
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Producto o error
  Cliente->>+Express: GET /categoria/:cat
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Buscar por categoría
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Lista filtrada o error
  Cliente->>+Express: GET /precio/:precio
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Buscar por precio
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Lista filtrada o error
  Cliente->>+Express: POST /productos
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Verificar duplicado
  MongoDB-->>Express: Insertar nuevo producto
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Producto creado o error
  Cliente->>+Express: PUT /productos/:cod
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Buscar producto
  MongoDB-->>Express: Reemplazar con nuevo
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Producto modificado o error
  Cliente->>+Express: PATCH /productos/:cod
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Buscar producto
  MongoDB-->>Express: Actualizar campos
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Producto actualizado o error
  Cliente->>+Express: DELETE /productos/:cod
  Express->>+MongoDB: Conectar a BD
  MongoDB-->>Express: Buscar y eliminar
  Express->>MongoDB: Desconectar
  Express-->>-Cliente: Producto eliminado o error
    Grupo 12: 🎐 Beverly J. L. Gonzalez Casanova 🎐 Romina del Carmen Iurchik