diff --git a/backend/models/genre.js b/backend/models/genre.js new file mode 100644 index 0000000000000000000000000000000000000000..d385cbfd2ced27801caa84c681de97d28791fd48 --- /dev/null +++ b/backend/models/genre.js @@ -0,0 +1,20 @@ +const mongoose = require("mongoose"); + +const GenreSchema = new mongoose.Schema( + { + name: { type: String }, + id: { type: Number, required: true, unique: true }, + }, + { + toJSON: { virtuals: true }, // So `res.json()` and other `JSON.stringify()` functions include virtuals + toObject: { virtuals: true }, // So `console.log()` and other functions that use `toObject()` include virtuals + } +); + +const GenreModel = mongoose.model( + "GenreModel", + GenreSchema, + "genres_populated" +); + +module.exports = GenreModel; diff --git a/backend/populate.js b/backend/populate.js index 1db112442648f3db8dfd8e6e771998e1f0c61e82..fb3a00f32d88b717ddc7f62a9ff5141bbad2dcf9 100644 --- a/backend/populate.js +++ b/backend/populate.js @@ -1,5 +1,6 @@ const mongoose = require("mongoose"); const MovieModel = require("./models/movie"); +const GenreModel = require("./models/genre"); const axios = require("axios"); async function fetchMoviesFromTheMovieDatabase(n) { @@ -58,10 +59,56 @@ async function populateMovies(movies) { } } +async function fetchGenresFromTheMovieDatabase(type) { + // TODO: fetch genres from the The Movie Database API + try { + // Do something if call succeeded + const genreFetch = await axios.get( + ` https://api.themoviedb.org/3/genre/` + + type + + `/list?api_key=522d421671cf75c2cba341597d86403a&language=en-US` + ); + console.log(genreFetch.data.genres); + return genreFetch.data.genres; + } catch (error) { + // Do something if call failed + console.error(error); + } +} + +async function populateGenres(genres) { + // TODO: populate genres into the database + try { + for (const genre of genres) { + const newGenre = await new GenreModel({ + // Genre attributes + name: genre.name, + id: genre.id, + }); + + // Create a new genre instance + const is_present = await GenreModel.find({ id: genre.id }); + console.log(is_present); + + if (!is_present.length) { + const createdGenre = await newGenre.save(); + // What to do after genre has been saved ! + console.log("Genre Saved !"); + console.log(createdGenre.name); + } else { + console.log("Genre already exists within de db"); + } + } + } catch (error) { + console.log(error); + } +} + async function dropDataBase() { // TODO: Drop the collections try { await MovieModel.deleteMany({}); + await GenreModel.deleteMany({}); } catch (error) { console.log(error); } @@ -77,6 +124,11 @@ async function populate(N) { await populateMovies(movies); console.log(n); } + const tvGenres = await fetchGenresFromTheMovieDatabase("tv"); + await populateGenres(tvGenres); + + const moviesGenres = await fetchGenresFromTheMovieDatabase("movie"); + await populateGenres(moviesGenres); // disconnect mongoose client await client.disconnect();