Skip to content

cmpiedrahita/MasterChefCelebrity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MasterChef Celebrity API

API de gestión de recetas para el programa de telerrealidad MasterChef Celebrity que permite a televidentes, participantes y chefs registrar y consultar recetas de cocina.

Descripción del Proyecto

Esta API permite gestionar recetas de cocina con diferentes tipos de usuarios (televidentes, participantes del programa y chefs jurados). Cada receta incluye título, ingredientes, pasos de preparación y información del chef. Las recetas de participantes requieren especificar la temporada.

Tecnologías

  • Node.js + Express
  • MongoDB + Mongoose
  • Jest + Supertest (testing)
  • Swagger UI (documentación)
  • GitHub Actions (CI/CD)

Instalación y Ejecución Local

Prerrequisitos

  • Node.js (v18 o superior)
  • MongoDB (local o Atlas)
  • Git

Pasos de instalación

  1. Clonar el repositorio:

    git clone https://github.com/cmpiedrahita/MasterChefCelebrity.git
    cd masterchef-api
  2. Instalar dependencias:

    npm install
  3. Configurar variables de entorno:

    cp .env.example .env

    Editar .env con las configuraciones:

    MONGODB_URI=mongodb://localhost:27017/masterchef_celebrity
    PORT=3000
    NODE_ENV=development
  4. Iniciar MongoDB:

    • Local: net start MongoDB (Windows) o brew services start mongodb-community (Mac)
    • O usar MongoDB Atlas (cloud)
  5. Ejecutar la aplicación:

    # Desarrollo
    npm run dev
    
    # Producción
    npm start
  6. Ejecutar pruebas:

    npm test

Ejemplos de Request y Response por Endpoint

Crear Recetas

POST /api/recipes/televiewer

Descripción: Crear receta de televidente

Request:

{
  "title": "Pasta Carbonara",
  "ingredients": ["pasta", "huevos", "queso parmesano", "panceta"],
  "steps": ["Cocinar pasta", "Mezclar huevos con queso", "Combinar todo"],
  "chefName": "Juan Pérez"
}

Response (201):

{
  "_id": "507f1f77bcf86cd799439011",
  "title": "Pasta Carbonara",
  "ingredients": ["pasta", "huevos", "queso parmesano", "panceta"],
  "steps": ["Cocinar pasta", "Mezclar huevos con queso", "Combinar todo"],
  "chefName": "Juan Pérez",
  "chefType": "televidente",
  "createdAt": "2024-01-15T10:30:00.000Z",
  "updatedAt": "2024-01-15T10:30:00.000Z"
}

POST /api/recipes/participant

Descripción: Crear receta de participante

Request:

{
  "title": "Risotto de Hongos",
  "ingredients": ["arroz arborio", "hongos", "caldo", "vino blanco"],
  "steps": ["Sofreír hongos", "Agregar arroz", "Cocinar con caldo"],
  "chefName": "María García",
  "season": 3
}

Response (201):

{
  "_id": "507f1f77bcf86cd799439012",
  "title": "Risotto de Hongos",
  "ingredients": ["arroz arborio", "hongos", "caldo", "vino blanco"],
  "steps": ["Sofreír hongos", "Agregar arroz", "Cocinar con caldo"],
  "chefName": "María García",
  "chefType": "participante",
  "season": 3,
  "createdAt": "2024-01-15T10:35:00.000Z",
  "updatedAt": "2024-01-15T10:35:00.000Z"
}

POST /api/recipes/chef

Descripción: Crear receta de chef

Request:

{
  "title": "Paella Valenciana",
  "ingredients": ["arroz", "pollo", "verduras", "azafrán"],
  "steps": ["Sofreír ingredientes", "Agregar arroz", "Cocinar con caldo"],
  "chefName": "Chef Martínez"
}

Response (201):

{
  "_id": "507f1f77bcf86cd799439013",
  "title": "Paella Valenciana",
  "ingredients": ["arroz", "pollo", "verduras", "azafrán"],
  "steps": ["Sofreír ingredientes", "Agregar arroz", "Cocinar con caldo"],
  "chefName": "Chef Martínez",
  "chefType": "chef",
  "createdAt": "2024-01-15T10:40:00.000Z",
  "updatedAt": "2024-01-15T10:40:00.000Z"
}

Consultar Recetas

GET /api/recipes

Descripción: Obtener todas las recetas

Response (200):

[
  {
    "_id": "507f1f77bcf86cd799439011",
    "title": "Pasta Carbonara",
    "ingredients": ["pasta", "huevos", "queso parmesano", "panceta"],
    "steps": ["Cocinar pasta", "Mezclar huevos con queso", "Combinar todo"],
    "chefName": "Juan Pérez",
    "chefType": "televidente",
    "createdAt": "2024-01-15T10:30:00.000Z",
    "updatedAt": "2024-01-15T10:30:00.000Z"
  }
]

GET /api/recipes/:id

Descripción: Obtener receta por ID

Response (200):

{
  "_id": "507f1f77bcf86cd799439011",
  "title": "Pasta Carbonara",
  "ingredients": ["pasta", "huevos", "queso parmesano", "panceta"],
  "steps": ["Cocinar pasta", "Mezclar huevos con queso", "Combinar todo"],
  "chefName": "Juan Pérez",
  "chefType": "televidente",
  "createdAt": "2024-01-15T10:30:00.000Z",
  "updatedAt": "2024-01-15T10:30:00.000Z"
}

Response (404):

{
  "error": "Receta no encontrada"
}

GET /api/recipes/type/participants

Descripción: Obtener recetas de participantes

Response (200):

[
  {
    "_id": "507f1f77bcf86cd799439012",
    "title": "Risotto de Hongos",
    "chefName": "María García",
    "chefType": "participante",
    "season": 3
  }
]

GET /api/recipes/type/televiewers

Descripción: Obtener recetas de televidentes

GET /api/recipes/type/chefs

Descripción: Obtener recetas de chefs

GET /api/recipes/season/:season

Descripción: Obtener recetas por temporada

Ejemplo: GET /api/recipes/season/3

Response (200):

[
  {
    "_id": "507f1f77bcf86cd799439012",
    "title": "Risotto de Hongos",
    "chefName": "María García",
    "chefType": "participante",
    "season": 3
  }
]

GET /api/recipes/ingredient/:ingredient

Descripción: Buscar recetas por ingrediente

Ejemplo: GET /api/recipes/ingredient/pasta

Response (200):

[
  {
    "_id": "507f1f77bcf86cd799439011",
    "title": "Pasta Carbonara",
    "ingredients": ["pasta", "huevos", "queso parmesano", "panceta"],
    "chefName": "Juan Pérez",
    "chefType": "televidente"
  }
]

Gestionar Recetas

PUT /api/recipes/:id

Descripción: Actualizar receta

Request:

{
  "title": "Pasta Carbonara Mejorada",
  "ingredients": ["pasta", "huevos", "queso parmesano", "panceta", "pimienta"]
}

Response (200):

{
  "_id": "507f1f77bcf86cd799439011",
  "title": "Pasta Carbonara Mejorada",
  "ingredients": ["pasta", "huevos", "queso parmesano", "panceta", "pimienta"],
  "updatedAt": "2024-01-15T11:00:00.000Z"
}

DELETE /api/recipes/:id

Descripción: Eliminar receta

Response (200):

{
  "message": "Receta eliminada exitosamente"
}

Documentación

Local

La documentación completa de la API está disponible en:

http://localhost:3000/api-docs

Azure (Producción)

Enlace al Swagger UI publicado en Azure:

https://masterchef-celebrity-api.azurewebsites.net/api-docs

Testing

Ejecutar pruebas:

npm test

Ejecutar pruebas en modo watch:

npm run test:watch

Pruebas incluidas:

  • Validar registro de recetas
  • Validar búsqueda por ingrediente
  • Validar error para receta inexistente
  • Filtrado por tipo de chef

CI/CD

  • Tests: Se ejecutan automáticamente en push/PR a develop
  • Deploy: Se despliega automáticamente en Azure al hacer push a main

Variables de Entorno

MONGODB_URI=mongodb://localhost:27017/masterchef_celebrity
PORT=3000
NODE_ENV=development

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors