Skip to content

Commit

Permalink
Mejoras en la API y datos
Browse files Browse the repository at this point in the history
  • Loading branch information
enrgaroli committed Mar 15, 2024
1 parent 967fe14 commit 6381080
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 104 deletions.
34 changes: 5 additions & 29 deletions Enrique/index-EGO.js → Enrique/data-EGO.js
Original file line number Diff line number Diff line change
Expand Up @@ -419,8 +419,11 @@ let movies_data = [
}
]


console.log(movies_data.slice(0, 3))
movies_data.forEach(movie => {
movie.genres = movie.genres.replace(/ /g, ", ");
movie.production_companies = movie.production_companies.map(company => company.name).join(", ");
movie.production_countries = movie.production_countries.map(country => country.name).join(", ");
})

// Lee el archivo CSV
// let csvData = fs.readFileSync('./Enrique/movies_dataset.csv', 'utf8');
Expand All @@ -443,32 +446,5 @@ console.log(movies_data.slice(0, 3))
// console.log(movies.slice(0,3));
// }
// });

// let movies_reduce = []
// movies_reduce.push(movies.splice(0,11))

function presupuestoMedioPais(pais) {
// Creo el array presupuestos donde estarán el budget de cada pelicula
let presupuestos = new Array();
for (let i = 0; i < movies_data.length; i++){
//presupuestos.push(parseInt(movies[i].budget))
let paises_movie = movies_data[i].production_countries.map(country => country.name)
if (paises_movie.includes(pais)) {
presupuestos.push(movies_data[i].budget)
}
}
// Calculamos la suma de los presupuestos con reduce
let sumaPresupuestos = presupuestos.reduce((a,b) => a + b, 0)
// Obtenemos el total de peliculas para hacer la media
let totalPeliculas = presupuestos.length

return sumaPresupuestos/totalPeliculas
}

let paisFiltro = "United States of America"

let averageBudget = presupuestoMedioPais(paisFiltro);

console.log(`El presupuesto medio de las peliculas producidas en ${paisFiltro} es de ${Math.round(averageBudget)}€`);

module.exports = movies_data;
126 changes: 66 additions & 60 deletions Enrique/index.js → Enrique/indexAPI-EGO.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const movies_data = require("./index-EGO.js");
const movies_data = require("./data-EGO.js");

const API_BASE = "/api/v1";

Expand Down Expand Up @@ -63,61 +63,27 @@ module.exports = (app, dbMovies) => {
let campos = Object.entries(req.query)
sinIdMovies.forEach(movie => {
let verdad = [];
let specialFields = ['genres', 'keywords', 'production_companies', 'production_countries', 'release_date']
campos.forEach(entrada => {
let clave = entrada[0];
let valor = entrada[1];
// La query como parametros tiene genero en ella
if (clave === 'genres') {
// Como el valor de genres es un string con los generos, comprobamos si el valor que buscamos se encuentra en ese string
// Si la clave se refiere a index, al ser un valor numérico hay que parsearlo
if (clave === 'index') {
verdad.push(movie[clave] === parseInt(valor));
// Si el la clave del parámetro de busqueda coincide con alguno de la lista specialFields, se hara la busqueda especial para ellos
} else if (specialFields.includes(clave)) {
verdad.push(movie[clave].includes(valor));
// La query como parametros tiene palabras clave en ella
} else if (clave === 'keywords') {
verdad.push(movie[clave].includes(valor));
// La query como parametros tiene fecha de lanzamiento en ella
} else if (clave === 'release_date') {
verdad.push(movie[clave].includes(valor));
// La query como parametros tiene compañias de produccion en ella
} else if (clave === 'production_companies') {
let compañiaComprueba = [];
// Como el campo production_companies es un array de objetos
// recorro dicho array de objetos con un for each
movie.production_companies.forEach(company => {
// Vamos a comprobar que al menos uno de los objetos del array contiene el valor de la query
if (company['name'] === valor) {
compañiaComprueba.push(true);
} else {
compañiaComprueba.push(false);
}
if (compañiaComprueba.reduce((a, b) => a || b)) {
verdad.push(true);
} else {
// Este else es para que la lista verdad no este vacia en caso de ser el unico parametro
verdad.push(false);
}
})
// La query como parametros tiene paises de produccion en ella
} else if (clave === 'production_countries') {
let countryComprueba = []
movie.production_countries.forEach(country => {
if (country['name'] === valor) {
countryComprueba.push(true);
} else {
countryComprueba.push(false);
}
if (countryComprueba.reduce((a, b) => a || b)) {
verdad.push(true);
} else {
verdad.push(false);
}
})
// Si no requiere ningun filtrado especial se busca sin mas
} else {
verdad.push(movie[clave] === valor);
}
})
// Comprueba que la busqueda haya sido correcta
if (verdad.reduce((a, b) => a && b)) {
showMovies.push(movie);
}
})
// Devuelve los objetos que coincidan con la busqueda
res.send(JSON.stringify(showMovies));
}
} else {
Expand Down Expand Up @@ -180,7 +146,7 @@ module.exports = (app, dbMovies) => {
})
});

// DELETE Del recurso
// DELETE Del la colección
app.delete(API_BASE+"/movies-dataset", (req, res) => {
dbMovies.find({}, (err, docs) => {
if (err) {
Expand All @@ -202,9 +168,10 @@ module.exports = (app, dbMovies) => {
})
});

// D01 punto 3 de por persona
app.get(API_BASE+"/movies-dataset/:genero/:year", (req, res) => {
// D01 punto 3 de por persona, filtrar por genero y año por defecto
app.get(API_BASE+"/movies-dataset/:genero/:company/:year", (req, res) => {
let genero = req.params.genero;
let company = req.params.company;
let year = req.params.year;
dbMovies.find({}, (err, movies) => {
if (err) {
Expand All @@ -214,18 +181,61 @@ module.exports = (app, dbMovies) => {
delete c._id;
return c
});
let resPelis = [];
let resPelis = {};
sinIdMovies.forEach(movie => {
if (movie.genres.includes(genero) && movie.release_date.includes(year)) {
resPelis.push(movie)
if (movie.genres.includes(genero) && movie.release_date.includes(year) && movie.production_companies.includes(company)) {
resPelis = movie
}
})

res.send(JSON.stringify(resPelis));
if (resPelis.length === 0) {
res.sendStatus(404, "Not Found");
} else {
res.send(JSON.stringify(resPelis));
}
}
})
})

//D01 hacer un put al recurso con propiedades indicadas en genero y año
app.put(API_BASE+"/movies-dataset/:genero/:company/:year", (req, res) => {
let cambio = req.body;
let genero = req.params.genero;
let company = req.params.company;
let year = req.params.year;
let updates = 0
dbMovies.update({ genres: { $regex: eval(`/`+genero+`/`)}, production_companies: {$regex: eval(`/`+company+`/`)}, release_date: {$regex: eval(`/`+year+`/`)} }, cambio, {}, (err, numUpdated) => {
if (err) {
res.sendStatus(500);
} else {
updates = updates + 1
}
if (numUpdated >= 1) {
res.sendStatus(201);
} else {
res.sendStatus(404);
}
});

});

// D01 borrar los recursos que coincidan con las propiedades indicadas
app.delete(API_BASE+"/movies-dataset/:genero/:company/:year", (req, res) => {
let genero = req.params.genero;
let company = req.params.company;
let year = req.params.year;
dbMovies.remove({ genres: { $regex: eval(`/`+genero+`/`)}, production_companies: {$regex: eval(`/`+company+`/`)}, release_date: {$regex: eval(`/`+year+`/`)} }, {}, (err, numRemoved) => {
if (err) {
res.sendStatus(500)
} else {
if (numRemoved >= 1) {
res.status(200).send(`Ok. ${numRemoved} resource/s removed `);
} else {
res.sendStatus(404);
}
}
});
});

// 16.4 GET Un recurso inexistente
app.get(API_BASE+"/datos-peliculas", (req, res) => {
res.sendStatus(404, "Not Found");
Expand All @@ -239,11 +249,7 @@ module.exports = (app, dbMovies) => {
// GET Del un recurso por su titulo
app.get(API_BASE+"/movies-dataset/:title", (req, res) => {
let title = req.params.title;
// Como tenemos identififcadores con espacios, primero limpiamos el parametro para que sea igual que el de la BD
if (title.includes("%20")) {
title = encodeURIComponent(nombre);
}
// Ahora buscamos las peliculas cuyo titulo original coincide con el recurso buscado
// Buscamos las peliculas cuyo titulo original coincide con el recurso buscado
dbMovies.find({ original_title: title }, (err, doc) => {
if (err) {
res.sendStatus(500, "Internal Error");
Expand All @@ -266,7 +272,7 @@ module.exports = (app, dbMovies) => {
app.put(API_BASE+"/movies-dataset/:title", (req,res) => {
let cambio = req.body;
let title = req.params.title;
dbMovies.find({ original_title: title} , (err, doc) => {
dbMovies.find({ original_title: title}, (err, doc) => {
if (err) {
res.sendStatus(500, "Internal Error");
} else {
Expand All @@ -290,9 +296,9 @@ module.exports = (app, dbMovies) => {
app.delete(API_BASE+"/movies-dataset/:title", (req, res) => {
let title = req.params.title;

if (title.includes("%20")) {
/*if (title.includes("%20")) {
title = encodeURIComponent(nombre);
}
}*/

dbMovies.remove({"original_title": title}, {}, (err, numRemoved) => {
if (err) {
Expand Down
16 changes: 1 addition & 15 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ let dataStore = require("nedb");

let data_VEG = require('./Victor/index-VEG');
let calcularMediaTiempoPelea = require('./Nico/index-NRM');
//let presupuesto = require("./Enrique/index-EGO");

//APIs
let enriqueAPI = require("./Enrique/index");
let enriqueAPI = require("./Enrique/indexAPI-EGO");
let api_VEG = require('./Victor/api-VEG');
let api_NRM = require('./Nico/index-api');
const data = require("./Victor/index-VEG");
Expand All @@ -29,11 +28,6 @@ app.listen(PORT,()=>{
console.log(`Server listening on port ${PORT}.`);
});

// Eliminada la ruta /cool
// app.get("/cool", (req,res)=>{
// res.send(`<html><body><h1>${cool()}</h1></body></html>`);
// });

// Nicolas Redondo Moreno
// app.get("/samples/NRM", (req, res) => {
// const {mediaMinu, mediaSeg} = calcularMediaTiempoPelea();
Expand All @@ -54,14 +48,6 @@ api_NRM(app, dbUfc);
//Enrique Garcia Olivares
enriqueAPI(app, dbMovies);

// Elimidada la ruta /samples/EGO
// app.get("/samples/EGO", (req, res) => {
// let paisFiltro = "United States of America"
// let presupuestoMedioPais = presupuesto(paisFiltro)
// res.send(`<html><body><h2>El presupuesto medio de las peliculas producidas en ${paisFiltro} es de ${presupuestoMedioPais}€</h2></body></html>`)
// })


//Víctor Escalera García

//Ruta /samples/VEG eliminada
Expand Down

0 comments on commit 6381080

Please sign in to comment.