Select Git revision
NotificationOnDeviceRepository.php
populate.js 4.40 KiB
const mongoose = require("mongoose");
const MovieModel = require("./models/movie");
const GenreModel = require("./models/genre");
const axios = require("axios");
async function fetchMoviesFromTheMovieDatabase(n) {
// TODO: fetch movies from the The Movie Database API
try {
// Do something if call succeeded
const movieFetch = await axios.get(
`https://api.themoviedb.org/3/movie/popular?api_key=522d421671cf75c2cba341597d86403a&page=` +
n
);
// console.log(movieFetch.data.results);
return movieFetch.data.results;
} catch (error) {
// Do something if call failed
console.error(error);
}
}
async function populateMovies(movies) {
// TODO: populate movies into the database
try {
for (const movie of movies) {
const castFetch = await axios.get(
`https://api.themoviedb.org/3/movie/` +
movie.id +
`/credits?api_key=522d421671cf75c2cba341597d86403a`
);
const keywordsFetch = await axios.get(
`https://api.themoviedb.org/3/movie/` +
movie.id +
`/keywords?api_key=522d421671cf75c2cba341597d86403a`
);
const keywords = keywordsFetch.data.keywords.map(function (e) {
return e.name;
});
const Director = castFetch.data.crew.filter(
(person) => person.job == "Director"
)[0].name;
const mainActor = castFetch.data.cast[0]["name"];
const newMovie = await new MovieModel({
// Movie attributes
adult: movie.adult,
backdrop_path: movie.backdrop_path,
genre_ids: movie.genre_ids,
id: movie.id,
original_language: movie.original_language,
original_title: movie.original_title,
overview: movie.overview,
popularity: movie.popularity,
poster_path: movie.poster_path,
release_date: movie.release_date,
title: movie.title,
video: movie.video,
vote_average: movie.vote_average,
vote_count: movie.vote_count,
director: Director,
main_actor: mainActor,
keywords: keywords,
});
// Create a new movie instance
const createdMovie = await newMovie.save();
// What to do after movie has been saved !
console.log("Movie Saved !");
console.log(createdMovie.title);
}
} catch (error) {
console.log(error);
}
}
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);
}
}
async function populate(N) {
// Connect mongoose client
const client = await mongoose.connect(process.env.MONGO_DB_URL);
await dropDataBase();
for (let n = 1; n < N; n++) {
const movies = await fetchMoviesFromTheMovieDatabase(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();
}
populate(15)
.then(() => {
console.log("All done !");
})
.catch((error) => {
console.error(error);
});