Skip to content
Snippets Groups Projects
init-db.js 6.65 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 categoriesOthersData = require('./data/categoriesOthers');
    const categoriesAccompanementsData = require('./data/categoriesAccompanements');
    const categoriesFormationData = require('./data/categoriesFormation');
    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.
    mongoose.set('useFindAndModify', false);
    
    function hashPassword() {
      return bcrypt.hashSync(process.env.USER_PWD, process.env.SALT);
    }
    
    
    const handleError = async (name, err) => {
      /* show messages */
      if (err) {
        if (err.code === 26) console.error(`-- ${name} collection does not exists --`);
        else throw err;
      } else console.log(`-- ${name} collection dropped --`);
    };
    
    // 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 categoriesOthersSchema = mongoose.Schema({
    
      name: String,
      id: String,
      modules: [],
    });
    
    const categoriesAccompanementsSchema = mongoose.Schema({
    
      name: String,
      id: String,
      modules: [],
    });
    
    const categoriesFormationSchema = mongoose.Schema({
    
      name: String,
      id: String,
      modules: [],
    });
    
    const structuresSchema = mongoose.Schema({
    
      numero: String,
      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,
      accessModality: [],
      otherDescription: String,
      labelsQualifications: [],
      publics: [],
      exceptionalClosures: String,
      publicsAccompaniment: [],
      proceduresAccompaniment: [],
      remoteAccompaniment: Boolean,
      baseSkills: [],
      accessRight: [],
      socialAndProfessional: [],
      parentingHelp: [],
      digitalCultureSecurity: [],
      equipmentsAndServices: [],
      freeWorkShop: Boolean,
      nbComputers: Number,
      nbPrinters: Number,
      nbTablets: Number,
      nbNumericTerminal: Number,
      nbScanners: Number,
      hours: Object,
      coord: [],
      deletedAt: Date,
      accountVerified: Boolean,
    });
    
    
    // compile schema to model
    
    const user = mongoose.model('users', usersSchema);
    const structuresType = mongoose.model('structureType', structuresTypeSchema);
    const categoriesOthers = mongoose.model('categoriesOthers', categoriesOthersSchema);
    const categoriesAccompanements = mongoose.model('CategoriesAccompagnement', categoriesAccompanementsSchema);
    const categoriesFormation = mongoose.model('categoriesFormation', categoriesFormationSchema);
    const structures = mongoose.model('structures', structuresSchema);
    const jobs = mongoose.model('jobs', jobsSchema);
    const employers = mongoose.model('employers', employersSchema);
    
    
    /* drop users collections */
    
    mongoose.connection.dropCollection('users', async (err) => {
      await handleError('Users', err);
    
    
      // Init passsword
      console.log('-- Users password encryption based on .env --');
      userData.data.forEach((user) => {
        user.password = hashPassword();
      });
      // save model to database
    
      user.create(userData.data, (error) => {
    
    Hugo SUBTIL's avatar
    Hugo SUBTIL committed
        if (error) return console.error(error);
    
        console.log('-- Users collection initialized --');
    
      });
    });
    
    /* Create structures ref */
    
    mongoose.connection.dropCollection('structuretype', async (err) => {
    
      await handleError('structureType', err);
    
      structuresType.create(structuresTypeData.data, (error) => {
    
        if (error) return console.error(error);
      });
    });
    
    mongoose.connection.dropCollection('categoriesothers', async (err) => {
      await handleError('categoriesOthers', err);
      categoriesOthers.create(categoriesOthersData.data, (error) => {
        if (error) return console.error(error);
      });
    });
    
    mongoose.connection.dropCollection('categoriesaccompagnements', async (err) => {
      await handleError('categoriesAccompanements', err);
      categoriesAccompanements.create(categoriesAccompanementsData.data, (error) => {
        if (error) return console.error(error);
      });
    });
    
    mongoose.connection.dropCollection('categoriesformations', async (err) => {
    
      await handleError('categoriesFormations', err);
    
      categoriesFormation.create(categoriesFormationData.data, (error) => {
        if (error) return console.error(error);
      });
    });
    
    /* Create structures */
    mongoose.connection.dropCollection('structures', async (err) => {
      await handleError('structures', err);
      structures.create(structuresData.data, (error) => {
        if (error) return console.error(error);
    
      });
    });
    /* Create structures */
    mongoose.connection.dropCollection('jobs', async (err) => {
      await handleError('jobs', err);
      jobs.create(jobsData.data, (error) => {
        if (error) return console.error(error);
      });
    });
    /* Create structures */
    mongoose.connection.dropCollection('employers', async (err) => {
      await handleError('employers', err);
      employers.create(employersData.data, (error) => {
        if (error) return console.error(error);
    
        process.exit(0);