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.
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.
- Node.js + Express
- MongoDB + Mongoose
- Jest + Supertest (testing)
- Swagger UI (documentación)
- GitHub Actions (CI/CD)
- Node.js (v18 o superior)
- MongoDB (local o Atlas)
- Git
-
Clonar el repositorio:
git clone https://github.com/cmpiedrahita/MasterChefCelebrity.git cd masterchef-api -
Instalar dependencias:
npm install
-
Configurar variables de entorno:
cp .env.example .env
Editar
.envcon las configuraciones:MONGODB_URI=mongodb://localhost:27017/masterchef_celebrity PORT=3000 NODE_ENV=development
-
Iniciar MongoDB:
- Local:
net start MongoDB(Windows) obrew services start mongodb-community(Mac) - O usar MongoDB Atlas (cloud)
- Local:
-
Ejecutar la aplicación:
# Desarrollo npm run dev # Producción npm start
-
Ejecutar pruebas:
npm test
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"
}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"
}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"
}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"
}
]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"
}Descripción: Obtener recetas de participantes
Response (200):
[
{
"_id": "507f1f77bcf86cd799439012",
"title": "Risotto de Hongos",
"chefName": "María García",
"chefType": "participante",
"season": 3
}
]Descripción: Obtener recetas de televidentes
Descripción: Obtener recetas de chefs
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
}
]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"
}
]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"
}Descripción: Eliminar receta
Response (200):
{
"message": "Receta eliminada exitosamente"
}La documentación completa de la API está disponible en:
http://localhost:3000/api-docs
Enlace al Swagger UI publicado en Azure:
https://masterchef-celebrity-api.azurewebsites.net/api-docs
Ejecutar pruebas:
npm testEjecutar pruebas en modo watch:
npm run test:watch- Validar registro de recetas
- Validar búsqueda por ingrediente
- Validar error para receta inexistente
- Filtrado por tipo de chef
- Tests: Se ejecutan automáticamente en push/PR a
develop - Deploy: Se despliega automáticamente en Azure al hacer push a
main
MONGODB_URI=mongodb://localhost:27017/masterchef_celebrity
PORT=3000
NODE_ENV=development