From 55c286e4f61483af98825acd843cb06b46c176d6 Mon Sep 17 00:00:00 2001
From: El Yaagoubi Bilel <bilel.el-yaagoubi@student-cs.fr>
Date: Wed, 8 Jun 2022 09:56:54 +0200
Subject: [PATCH] populate

---
 backend/populate.js | 85 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 backend/populate.js

diff --git a/backend/populate.js b/backend/populate.js
new file mode 100644
index 0000000..4c5284a
--- /dev/null
+++ b/backend/populate.js
@@ -0,0 +1,85 @@
+const mongoose = require("mongoose");
+const MovieModel = require("./models/movie");
+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 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,
+      });
+
+      // 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 dropDataBase() {
+  // TODO: Drop the collections
+  try {
+    await MovieModel.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);
+  }
+
+  // disconnect mongoose client
+  await client.disconnect();
+}
+
+populate(300)
+  .then(() => {
+    console.log("All done !");
+  })
+  .catch((error) => {
+    console.error(error);
+  });
-- 
GitLab