Skip to content
Snippets Groups Projects
init-db.js 5.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • /* 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: [],
    
      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,
    
    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,
    
      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,
      ]);
    
    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);
            });
        });
    }