Skip to content
Snippets Groups Projects
Select Git revision
  • 6942b5ccf1df95d00b11e3a9135a207b22e5e09a
  • master default
  • clement
  • fix_requirements
  • new_signup
  • interface_admin
  • hamza
  • dev
  • test
  • melissa
  • context_sheet
  • sorties_new
  • Seon82-patch-2
  • export_bdd
  • refactor/participation-user-link
15 results

admin.py

Blame
  • 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);
      });