Skip to content

Repository files navigation

Sistema de Gestión de Recetas de Cocina API REST

Evidencia AA2-EV01 Backend desarrollado con Node.js, Express y MongoDB.


Descripción

Sistema de Gestión de Recetas de Cocina desarrollado como una API RESTful para la empresa ficticia Sabores del Mundo S.A.S.

La aplicación permite administrar recetas internacionales mediante operaciones CRUD, almacenando la información en MongoDB y exponiéndola a través de una API REST construida con Express.

El proyecto fue desarrollado utilizando una arquitectura MVC, buenas prácticas de desarrollo, documentación mediante JSDoc y variables de entorno administradas con la nueva funcionalidad nativa de Node.js (process.loadEnvFile()).


Problema

Actualmente Sabores del Mundo S.A.S. almacena sus recetas en documentos de Word y hojas de cálculo de Excel.

Esta metodología presenta varios inconvenientes:

  • dificultad para buscar recetas
  • clasificación poco eficiente
  • duplicación de información
  • actualización manual de ingredientes
  • difícil mantenimiento
  • poco control sobre tiempos de preparación
  • imposibilidad de integrarse fácilmente con otras aplicaciones

Solución

Se desarrolló una API REST que centraliza toda la información de las recetas utilizando MongoDB.

La solución permite:

  • crear recetas
  • consultar recetas
  • actualizar recetas
  • eliminar recetas
  • validar los datos antes de almacenarlos
  • organizar la información mediante una arquitectura escalable

Tecnologías utilizadas

  • Node.js
  • Express
  • MongoDB
  • Mongoose
  • Morgan
  • Nodemon
  • JavaScript ES Modules (ESM)
  • JSDoc

Arquitectura

El proyecto utiliza el patrón MVC.

Cliente

   │

HTTP REST

   │

Routes

   │

Controllers

   │

Models

   │

MongoDB (Mongoose)

   │

Base de datos

Características principales

  • API RESTful
  • Arquitectura MVC
  • MongoDB Atlas
  • Validaciones mediante Mongoose
  • Scripts para creación del esquema
  • Seed de datos iniciales
  • Variables de entorno
  • Manejo de errores
  • Respuestas HTTP consistentes
  • Código documentado con JSDoc

Requisitos

Software necesario:

  • Node.js 24 o superior
  • MongoDB Atlas
  • npm
  • Git

Instalación

Clonar el repositorio

git clone https://github.com/carlosandresalzate/lab-sena-API.git

Entrar al proyecto

cd lab-sena-API

Instalar dependencias

npm install

Configuración

Crear un archivo llamado

.env

con el siguiente contenido:

PORT=5000

SERVER_DB=cluster.xxxxxxxxx.mongodb.net

USER_DB=usuario

PASS_DB=contraseña

Explicación de las variables

Variable Descripción
PORT Puerto donde se ejecutará la API
SERVER_DB Dirección del servidor MongoDB Atlas
USER_DB Usuario de la base de datos
PASS_DB Contraseña del usuario de MongoDB

La aplicación carga automáticamente el archivo mediante:

process.loadEnvFile(".env");

sin necesidad de utilizar dotenv.


Ejecución

Modo desarrollo

npm run dev

Modo producción

npm start

Scripts disponibles

Script Descripción
npm start Ejecuta la API
npm run dev Ejecuta la API con Nodemon
npm run seed Inserta recetas de ejemplo
npm run seed:force Reemplaza completamente los datos (elimina)
npm run create-db Ejecuta el script de creación de la base de datos
npm run schema Ejecuta el JSON Schema en MongoDB
npm run help Muestra ayuda de los scripts

Scripts de MongoDB

01-create-db.js

Script utilizado durante el desarrollo para:

  • crear la base de datos
  • crear la colección recetas

02-schema.js

Define el esquema JSON de MongoDB mediante:

  • validaciones
  • tipos de datos
  • campos obligatorios
  • restricciones

Estructura del proyecto

.
├── scripts/
│   ├── data/
│   │   └── recetas.seed.js
│   ├── 01-create-db.js
│   ├── 02-schema.js
│   ├── recetas.help.js
│   └── seed.js
│
├── src/
│   ├── config/
│   │   └── database.js
│   │
│   ├── controllers/
│   │   └── receta.controller.js
│   │
│   ├── models/
│   │   └── receta.model.js
│   │
│   ├── routes/
│   │   └── receta.routes.js
│   │
│   ├── schema/
│   │   └── receta.schema.js
│   │
│   ├── app.js
│   └── server.js
│
├── .env
├── .gitignore
├── LICENSE
├── package.json
└── README.md

Descripción de cada carpeta

src/

Contiene todo el código fuente de la aplicación.


config/

o Administra la conexión con MongoDB.


controllers/

Recibe las solicitudes HTTP y genera las respuestas correspondientes.


models/

Implementa la lógica de acceso a la base de datos.


routes/

Define todos los endpoints disponibles.


schema/

Contiene los modelos de Mongoose utilizados por la aplicación.


scripts/

Incluye herramientas auxiliares para desarrollo:

  • creación de la base
  • esquema
  • carga de datos
  • ayuda

Modelo de Receta

Cada receta contiene:

{
  "nombre": "",
  "descripcion": "",
  "categoria": "",
  "paisOrigen": "",
  "ingredientes": [],
  "tiempoPreparacion": 0,
  "porciones": 0,
  "dificultad": "",
  "pasos": [],
  "vegetariana": false
}

Endpoints

Obtener todas las recetas

GET /api/recetas

Obtener una receta

GET /api/recetas/:id

Crear una receta

POST /api/recetas

Actualizar una receta

PUT /api/recetas/:id

Eliminar una receta

DELETE /api/recetas/:id

Eliminar todas las recetas

DELETE /api/recetas

Ejemplo de petición

POST /api/recetas
Content-Type: application/json
{
  "nombre": "Pizza Margarita",
  "descripcion": "Pizza italiana tradicional",
  "categoria": "Plato Principal",
  "paisOrigen": "Italia",
  "ingredientes": [
    {
      "nombre": "Harina",
      "cantidad": "500",
      "unidad": "gramos"
    }
  ],
  "tiempoPreparacion": 40,
  "porciones": 4,
  "dificultad": "Facil",
  "pasos": ["Preparar la masa", "Hornear"],
  "vegetariana": true
}

Formato de respuestas

La API devuelve respuestas consistentes.

Éxito

{
  "success": true,
  "message": "Operación realizada correctamente.",
  "data": {}
}

Error

{
  "success": false,
  "message": "No se encontró la receta."
}

DeleteAll

{
  "success": true,
  "message": "Todas las recetas fueron eliminadas correctamente",
  "data": {
    "deletedCount": 12
  }
}

Códigos HTTP utilizados

Código Significado
200 OK
201 Created
204 No Content
400 Bad Request
404 Not Found
500 Internal Server Error

Datos de prueba

El proyecto incluye un conjunto de recetas iniciales.

Para cargarlas:

npm run seed

Para reemplazarlas completamente:

npm run seed:force

Documentación del código

Todo el proyecto se encuentra documentado mediante JSDoc, incluyendo:

  • clases
  • funciones
  • métodos
  • parámetros
  • tipos de retorno

Posibles mejoras futuras

En el desarrollo de la evidencia me vi con la necesidad de agregar algunas a futuro, las listo aquí como parte de mi bitácora.

  • Autenticación mediante JWT.
  • Gestión de usuarios y roles.
  • Búsqueda avanzada por filtros.
  • Paginación de resultados.
  • Documentación automática con Swagger/OpenAPI.
  • Validaciones utilizando express-validator.
  • Pruebas unitarias e integración.
  • Contenerización con Docker.
  • Pipeline de integración continua (CI/CD).

Autor

Desarrollado como evidencia académica del SENA.

Proyecto: Sistema de Gestión de Recetas de Cocina

Cliente ficticio: Sabores del Mundo S.A.S.


Licencia

Este proyecto se distribuye bajo la licencia GNU General Public License v3.0 o posterior (GPL-3.0-or-later).

Consulte el archivo LICENSE para obtener el texto completo de la licencia.

About

Proyecto del sena para crear una API usando Node.js, Express y MongoDB

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages