diff --git a/scripts/db/mongodump.sh b/scripts/db/mongodump.sh new file mode 100755 index 000000000..0b675ef57 --- /dev/null +++ b/scripts/db/mongodump.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# NODE_ENV=xxx ./scripts/data/dump.sh + +if [ -z ${NODE_ENV+x} ]; then NODE_ENV=development; fi + +db=$(grep -i 'mongodb://' ./config/defaults/${NODE_ENV}.js | awk -F/ '{print $NF}' | rev | cut -c3- | rev ) + +mongodump -d ${db} --out=./scripts/db/dump diff --git a/scripts/db/mongorestore.js b/scripts/db/mongorestore.js new file mode 100644 index 000000000..dce1a9f3e --- /dev/null +++ b/scripts/db/mongorestore.js @@ -0,0 +1,55 @@ +/** + * Module dependencies + */ + +const chalk = require('chalk'); +const path = require('path'); +const fs = require('fs'); +const bson = require('bson'); + +const config = require(path.resolve('./config')); +const mongooseService = require(path.resolve('./lib/services/mongoose')); + +const exceptions = ['uploads']; + +/** + * Work + */ + +const seedData = async () => { + try { + console.log(chalk.bold.green('Start Seed Dump by update items if differents')); + + // connect to mongo + await mongooseService.connect(); + await mongooseService.loadModels(); + + const database = config.db.uri.split('/')[config.db.uri.split('/').length - 1]; + console.log(chalk.bold.green(`database selected: ${database}`)); + + fs.readdirSync(path.resolve(`./scripts/db/dump/${database}`)).forEach((file) => { + if (file.slice(-4) === 'bson' && !exceptions.includes(file.split('.')[0])) { + const collection = file.slice(0, -5); + + const buffer = fs.readFileSync(path.resolve(`./scripts/db/dump/${database}/${collection}.bson`)); + let bfIdx = 0; + const items = []; + while (bfIdx < buffer.length) bfIdx = bson.deserializeStream(buffer, bfIdx, 1, items, items.length); + + const Service = require(path.resolve(`./modules/${collection}/services/${collection}.data.service`)); + Service.import(items, ['_id']); + + console.log(chalk.blue(`Database Seeding ${collection} : ${items.length}`)); + } + }); + } catch (err) { + console.log(chalk.bold.red(`Error ${err}`)); + } + + setTimeout(() => { + console.log(chalk.bold.green('Finish adding items to mongoDB')); + process.exit(0); + }, 5000); +}; + +seedData();