Skip to content

SebasDuqueC/Masterchef-celebrity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MasterChef Celebrity - API de Recetas

Este proyecto es una API REST desarrollada para el programa MasterChef Celebrity. La idea es que participantes, chefs profesionales y televidentes puedan compartir sus recetas en la plataforma del programa.

Descripción

La API permite gestionar recetas de cocina con toda la información necesaria: ingredientes, pasos de preparación, nombre del chef y tipo de participante. Si la receta fue hecha por un participante del programa, también se registra en qué temporada apareció.

Funcionalidades principales:

  • Crear recetas según el tipo de usuario (participante, chef o televidente)
  • Consultar todas las recetas o buscar una específica
  • Filtrar recetas por tipo de usuario o temporada
  • Buscar recetas que contengan ciertos ingredientes
  • Actualizar y eliminar recetas

Stack Tecnológico

  • Node.js y Express para el backend
  • MongoDB con Mongoose como base de datos
  • Swagger para la documentación interactiva
  • Jest y Supertest para las pruebas
  • GitHub Actions para CI/CD
  • Azure para el hosting

Instalación

Requisitos previos:

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

Pasos:

  1. Clonar el repositorio:
git clone https://github.com/SebasDuqueC/Masterchef-celebrity.git
cd Masterchef-celebrity
  1. Instalar las dependencias:
npm install
  1. Configurar las variables de entorno creando un archivo .env:
PORT=3000
MONGODB_URI=mongodb://localhost:27017/masterchef-celebrity
NODE_ENV=development

Si usas MongoDB Atlas, la URI se vería algo así:

MONGODB_URI=mongodb+srv://usuario:password@cluster.mongodb.net/masterchef-celebrity

Ejecución

Para levantar el servidor en modo desarrollo:

npm run dev

O en modo producción:

npm start

Una vez iniciado, puedes acceder a:

  • API: http://localhost:3000
  • Documentación Swagger: http://localhost:3000/api-docs

Pruebas

Ejecutar las pruebas:

npm test

Documentación de Endpoints

URL Base:

  • Local: http://localhost:3000
  • Producción: https://masterchef-celebrity-api-dgc0b0hgd8bhc6e3.eastus-01.azurewebsites.net

1. Crear Receta de Televidente

POST /api/recetas/televidente

Request Body:

{
  "titulo": "Pasta Carbonara",
  "ingredientes": ["Pasta", "Huevos", "Queso parmesano", "Panceta", "Pimienta negra"],
  "pasos": ["Cocinar la pasta", "Freír la panceta", "Mezclar huevos con queso", "Combinar todo"],
  "nombreChef": "María González"
}

Respuesta exitosa (201):

{
  "success": true,
  "message": "Receta de televidente creada exitosamente",
  "data": {
    "consecutivo": 1,
    "titulo": "Pasta Carbonara",
    "ingredientes": ["Pasta", "Huevos", "Queso parmesano", "Panceta", "Pimienta negra"],
    "pasos": ["Cocinar la pasta", "Freír la panceta", "Mezclar huevos con queso", "Combinar todo"],
    "chef": {
      "nombre": "María González",
      "tipo": "televidente"
    }
  }
}

2. Crear Receta de Participante

POST /api/recetas/participante

Request Body:

{
  "titulo": "Ceviche de Pescado",
  "ingredientes": ["Pescado fresco", "Limón", "Cebolla", "Cilantro", "Ají"],
  "pasos": ["Cortar el pescado en cubos", "Añadir limón", "Dejar marinar", "Agregar vegetales"],
  "nombreChef": "Carlos Ramírez",
  "temporada": 5
}

Respuesta exitosa (201):

{
  "success": true,
  "message": "Receta de participante creada exitosamente",
  "data": {
    "consecutivo": 2,
    "titulo": "Ceviche de Pescado",
    "temporada": 5,
    "chef": {
      "nombre": "Carlos Ramírez",
      "tipo": "participante"
    }
  }
}

3. Crear Receta de Chef

POST /api/recetas/chef

Request Body:

{
  "titulo": "Risotto de Hongos",
  "ingredientes": ["Arroz arborio", "Hongos", "Caldo de pollo", "Vino blanco", "Queso parmesano"],
  "pasos": ["Sofreír la cebolla", "Tostar el arroz", "Agregar vino", "Añadir caldo gradualmente"],
  "nombreChef": "Chef Jorge Rausch"
}

4. Obtener Todas las Recetas

GET /api/recetas

Devuelve un array con todas las recetas registradas.

5. Obtener Receta por Consecutivo

GET /api/recetas/:consecutivo

Ejemplo: GET /api/recetas/1

Si no existe la receta, devuelve un 404:

{
  "success": false,
  "message": "No se encontró una receta con el consecutivo 999"
}

6. Filtrar por Tipo de Chef

  • GET /api/recetas/tipo/participantes - Solo recetas de participantes
  • GET /api/recetas/tipo/televidentes - Solo recetas de televidentes
  • GET /api/recetas/tipo/chefs - Solo recetas de chefs profesionales

7. Obtener Recetas por Temporada

GET /api/recetas/temporada/:temporada

Ejemplo: GET /api/recetas/temporada/5

8. Buscar por Ingrediente

GET /api/recetas/ingrediente/:ingrediente

Ejemplo: GET /api/recetas/ingrediente/pollo

La búsqueda no distingue mayúsculas/minúsculas.

9. Actualizar Receta

PUT /api/recetas/:consecutivo

Puedes actualizar cualquier campo de la receta. Solo envías los campos que quieres cambiar.

10. Eliminar Receta

DELETE /api/recetas/:consecutivo

Swagger

La documentación interactiva está disponible en /api-docs cuando levantes el servidor. Ahí puedes probar todos los endpoints directamente desde el navegador.

CI/CD

El proyecto tiene configurado GitHub Actions para automatizar el proceso:

Rama develop: Cada vez que haces push o creas un pull request, se ejecutan automáticamente las pruebas para verificar que todo funcione bien.

Rama main: Cuando haces merge a main, además de ejecutar las pruebas, se despliega automáticamente la aplicación en Azure.

Pruebas

El proyecto incluye pruebas para validar:

  • Que se puedan crear recetas correctamente
  • Que la búsqueda por ingrediente funcione
  • Que se devuelva error 404 cuando una receta no existe

Estructura del Proyecto

├── .github/workflows/     # CI/CD con GitHub Actions
├── src/
│   ├── config/           # Configuración de MongoDB y Swagger
│   ├── controllers/      # Lógica de negocio
│   ├── models/          # Modelos de Mongoose
│   ├── routes/          # Definición de rutas
│   ├── app.js           # Configuración de Express
│   └── server.js        # Entrada de la aplicación
├── tests/               # Pruebas unitarias
└── package.json

Despliegue en Azure

Para desplegar en Azure necesitas configurar algunos secrets en GitHub:

  1. AZURE_WEBAPP_NAME - Nombre de tu aplicación en Azure
  2. AZURE_WEBAPP_PUBLISH_PROFILE - Perfil de publicación que descargas de Azure
  3. MONGODB_URI - URI de MongoDB Atlas para producción
  4. MONGODB_URI_TEST - URI de MongoDB para testing

Una vez configurados los secrets, solo necesitas hacer merge de develop a main y el despliegue se hace automáticamente.

Autor

Sebastián Duque - DOSW Company
Repositorio: https://github.com/SebasDuqueC/Masterchef-celebrity

Notas

Este proyecto fue desarrollado como parte del curso de Desarrollo Orientado a Servicios Web. Cualquier duda o sugerencia es bienvenida.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors