/* eslint-disable @typescript-eslint/no-var-requires */ // eslint-disable-next-line @typescript-eslint/no-var-requires const mongoose = require('mongoose'); // eslint-disable-next-line @typescript-eslint/no-var-requires const userData = require('./data/users'); const structuresTypeData = require('./data/structuresType'); const categoriesData = require('./data/categoriesData'); const structuresData = require('./data/structures'); const jobsData = require('./data/jobs'); const employersData = require('./data/employers'); // eslint-disable-next-line @typescript-eslint/no-var-requires const bcrypt = require('bcrypt'); // eslint-disable-next-line @typescript-eslint/no-var-requires const path = require('path'); // eslint-disable-next-line @typescript-eslint/no-var-requires // const app = require(path.resolve(__dirname, './server')); require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); /* connect to the database */ const param = 'mongodb://' + process.env.MONGO_NON_ROOT_USERNAME + ':' + process.env.MONGO_NON_ROOT_PASSWORD + '@' + process.env.MONGO_DB_HOST_AND_PORT + '/ram'; mongoose.connect(param, { useNewUrlParser: true, useUnifiedTopology: true }).catch((error) => console.log(error)); // Make Mongoose use `findOneAndUpdate()`. Note that this option is `true` // by default, you need to set it to false. function hashPassword() { return bcrypt.hashSync(process.env.USER_PWD, process.env.SALT); } // define Schema const usersSchema = mongoose.Schema({ name: String, surname: String, email: String, emailVerified: Boolean, validationToken: String, resetPasswordToken: String, role: Number, changeEmailToken: String, newEmail: String, structuresLink: [], structureOutdatedMailSent: [], pendingStructuresLink: [], unattachedSince: Date, password: String, phone: String, employer: String, job: String, }); const jobsSchema = mongoose.Schema( { name: String, hasPersonalOffer: Boolean, validated: Boolean, }, { collection: 'jobs' } ); const employersSchema = mongoose.Schema( { name: String, validated: Boolean, }, { collection: 'employers' } ); const structuresTypeSchema = mongoose.Schema( { name: String, values: [], }, { collection: 'structuretype' } ); const categoriesSchema = mongoose.Schema({ name: String, id: String, theme: String, modules: [], }); const structuresSchema = mongoose.Schema({ createdAt: String, updatedAt: String, structureName: String, structureType: String, description: String, lockdownActivity: String, address: Object, contactPhone: String, contactMail: String, website: String, facebook: String, twitter: String, instagram: String, linkedin: String, pmrAccess: Boolean, otherDescription: String, exceptionalClosures: String, remoteAccompaniment: Boolean, categories: {}, freeWorkShop: Boolean, nbComputers: Number, nbPrinters: Number, nbTablets: Number, nbNumericTerminal: Number, nbScanners: Number, hours: Object, coord: [], toBeDeletedAt: Date, deletedAt: Date, accountVerified: Boolean, }); // compile schema to model const user = mongoose.model('users', usersSchema); const structuresType = mongoose.model('structuretype', structuresTypeSchema); const categories = mongoose.model('categories', categoriesSchema); const structures = mongoose.model('structures', structuresSchema); const jobs = mongoose.model('jobs', jobsSchema); const employers = mongoose.model('employers', employersSchema); async function deleteData() { /* drop users collections */ let usersPromise = mongoose.connection.dropCollection('users'); /* Create structures ref */ let structureTypePromise = mongoose.connection.dropCollection('structuretype'); /* Create structures */ let structuresPromise = mongoose.connection.dropCollection('structures'); /* Create jobs */ let jobPromise = mongoose.connection.dropCollection('jobs'); /* Create employers */ let employersPromise = mongoose.connection.dropCollection('employers'); let categoriesPromise = mongoose.connection.dropCollection('categories'); await Promise.all([ employersPromise, structureTypePromise, jobPromise, structuresPromise, usersPromise, categoriesPromise, ]); return true; } async function createData() { let employersPromise = employers.create(employersData.data); let structureTypePromise = structuresType.create(structuresTypeData.data); let structuresPromise = structures.create(structuresData.data); let jobPromise = jobs.create(jobsData.data); let categoriesPromise = categories.create(categoriesData.data); // Init passsword console.log('-- Users password encryption based on .env --'); userData.data.forEach((user) => { user.password = hashPassword(); }); // save model to database let userPromise = user.create(userData.data); await Promise.all([ employersPromise, structureTypePromise, jobPromise, structuresPromise, userPromise, categoriesPromise, ]); return true; } function main() { deleteData() .then(() => { console.log('-- Deleting data done --'); }) .catch((err) => { if (err.code === 26) console.warn(`-- collection(s) does not exists --`); else console.error(err); }) .then(() => { createData() .then(() => { console.log('-- Init db done--'); process.exit(0); }) .catch((err) => { console.error(err); }); }); } main();