Skip to content
Snippets Groups Projects
Commit 72a39034 authored by Bilel El Yaagoubi's avatar Bilel El Yaagoubi
Browse files

Merge branch 'populate_and_db_structure' into 'master'

Populate and db structure

See merge request !7
parents 9de50d69 f5c291cd
Branches
No related tags found
1 merge request!7Populate and db structure
Pipeline #42504 passed
const mongoose = require("mongoose");
const MovieSchema = new mongoose.Schema(
{
adult: { type: Boolean },
backdrop_path: { type: String },
genre_ids: [Number],
id: { type: Number, required: true, unique: true },
original_language: { type: String },
original_title: { type: String },
overview: { type: String },
popularity: { type: Number },
poster_path: { type: String },
release_date: { type: Date },
title: { type: String },
video: { type: Boolean },
vote_average: { type: Number },
vote_count: { type: Number },
},
{
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
}
);
MovieSchema.virtual("liking_users", {
ref: "UserModel",
localField: "_id", // The user _id should match the viewers field in movies
foreignField: "liked_movies",
});
MovieSchema.virtual("later_watchers", {
ref: "UserModel",
localField: "_id", // The user _id should match the viewers field in movies
foreignField: "to_see_later",
});
MovieSchema.virtual("masking_users", {
ref: "UserModel",
localField: "_id", // The user _id should match the viewers field in movies
foreignField: "masked_movies",
});
const MovieModel = mongoose.model(
"MovieModel",
MovieSchema,
"movies_populated"
);
module.exports = MovieModel;
const mongoose = require("mongoose");
const { Schema } = mongoose;
const UserSchema = new mongoose.Schema({
const UserSchema = new mongoose.Schema(
{
email: { type: String, required: true, unique: true },
firstName: { type: String },
lastName: { type: String },
});
is_admin: { type: Boolean },
liked_movies: [{ type: Schema.Types.ObjectId, ref: "MovieModel" }],
to_see_later: [{ type: Schema.Types.ObjectId, ref: "MovieModel" }],
masked_movies: [{ type: Schema.Types.ObjectId, ref: "MovieModel" }],
},
{
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 UserModel = mongoose.model("UserModel", UserSchema, "users");
......
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);
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment