diff --git a/lib/api/migrateToMongo/index.js b/lib/api/migrateToMongo/index.js index 9c5051c..7afecef 100644 --- a/lib/api/migrateToMongo/index.js +++ b/lib/api/migrateToMongo/index.js @@ -83,9 +83,17 @@ module.exports = async () => { } ]; - // get folders from /instances const answers = await inquirer.prompt(questions); + // check if there is any data to migrate + if (answers.saveData.length === 0) { + console.log('🌱 No data selected to migrate!\n\n'); + process.exit(0); + } + if (answers.selectedInstances.length === 0) { + console.log('🌱 No instances selected to migrate!\n\n'); + process.exit(0); + } // connect to mongodb console.log('\n\n🌱 Connecting to MongoDB...'); @@ -102,27 +110,35 @@ module.exports = async () => { }, cliProgress.Presets.shades_classic); instancesBar.start(answers.selectedInstances.length, 0); - for (const instanceName of answers.selectedInstances) { - instancesBar.update({ instanceName }); + try { + for (const instanceName of answers.selectedInstances) { + instancesBar.update({ instanceName }); - const instanceBars = new cliProgress.MultiBar({ - format: '|' + colors.cyan('{bar}') + '| ' + colors.blue('{process}') + ' | {percentage}% || {value}/{total} Files', - clearOnComplete: true, - }, cliProgress.Presets.shades_classic); + const instanceBars = new cliProgress.MultiBar({ + format: '|' + colors.cyan('{bar}') + '| ' + colors.blue('{process}') + ' | {percentage}% || {value}/{total} Files', + clearOnComplete: true, + }, cliProgress.Presets.shades_classic); - for (const migration of answers.saveData) { - await migratorsFunctions[migration](instanceName, answers, instanceBars, conn, connInstance); + for (const migration of answers.saveData) { + await migratorsFunctions[migration](instanceName, answers, instanceBars, conn, connInstance); + } + + instanceBars.stop(); + instancesBar.increment(); } - - instanceBars.stop(); - instancesBar.increment(); + } catch (err) { + instancesBar.stop(); + console.log(err.file); + console.log(err.err); + process.exit(1); } - instancesBar.stop(); + instancesBar.stop(); // disconnect from mongodb console.log('\n\n🌱 Disconnecting from MongoDB...'); await conn.close(); + if (connInstance) await connInstance.close(); console.log('🌱 Disconnected from MongoDB!\n\n'); console.log('🌱 Migration completed!\n\n'); diff --git a/lib/api/migrateToMongo/migrators/chats.js b/lib/api/migrateToMongo/migrators/chats.js index f05e257..195c585 100644 --- a/lib/api/migrateToMongo/migrators/chats.js +++ b/lib/api/migrateToMongo/migrators/chats.js @@ -16,14 +16,19 @@ module.exports = async (instanceName, options, progressBars, conn) => { const progress = progressBars.create(files.length, 0) progress.update({ process: 'Chats' }) for (const file of files) { - const collectionName = file.key - const collection = conn.collection(collectionName) + try { + const collectionName = file.key + const collection = conn.collection(collectionName) - const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) - data._id = file.path.split('\\').pop().split('.')[0] - await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) + const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) + data._id = file.path.split('\\').pop().split('.')[0] + await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) - progress.increment() + progress.increment() + } catch (err) { + progress.stop() + throw { err, file } + } } } diff --git a/lib/api/migrateToMongo/migrators/contacts.js b/lib/api/migrateToMongo/migrators/contacts.js index 5da8bfb..fb6b6d2 100644 --- a/lib/api/migrateToMongo/migrators/contacts.js +++ b/lib/api/migrateToMongo/migrators/contacts.js @@ -16,14 +16,19 @@ module.exports = async (instanceName, options, progressBars, conn) => { const progress = progressBars.create(files.length, 0) progress.update({ process: 'Contacts' }) for (const file of files) { - const collectionName = file.key - const collection = conn.collection(collectionName) + try { + const collectionName = file.key + const collection = conn.collection(collectionName) - const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) - data._id = file.path.split('\\').pop().split('.')[0] - await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) + const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) + data._id = file.path.split('\\').pop().split('.')[0] + await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) - progress.increment() + progress.increment() + } catch (err) { + progress.stop() + throw { err, file } + } } } diff --git a/lib/api/migrateToMongo/migrators/instance.js b/lib/api/migrateToMongo/migrators/instance.js index 1f93726..7325981 100644 --- a/lib/api/migrateToMongo/migrators/instance.js +++ b/lib/api/migrateToMongo/migrators/instance.js @@ -30,13 +30,18 @@ module.exports = async (instanceName, options, progressBars, conn, connInstance) const progress = progressBars.create(files.length, 0) progress.update({ process: 'Instance' }) for (const file of files) { - const collectionName = file.key || instanceName - const collection = (!file.secondaryConnection ? conn : connInstance).collection(collectionName) + try { + const collectionName = file.key || instanceName + const collection = (!file.secondaryConnection ? conn : connInstance).collection(collectionName) - const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) - data._id = file.path.split('\\').pop().split('.')[0] - await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) - progress.increment() + const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) + data._id = file.path.split('\\').pop().split('.')[0] + await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) + progress.increment() + } catch (err) { + progress.stop() + throw { err, file } + } } } diff --git a/lib/api/migrateToMongo/migrators/messageUpdate.js b/lib/api/migrateToMongo/migrators/messageUpdate.js index 054a8b1..48de4c7 100644 --- a/lib/api/migrateToMongo/migrators/messageUpdate.js +++ b/lib/api/migrateToMongo/migrators/messageUpdate.js @@ -16,14 +16,19 @@ module.exports = async (instanceName, options, progressBars, conn) => { const progress = progressBars.create(files.length, 0) progress.update({ process: 'Message Update' }) for (const file of files) { - const collectionName = file.key - const collection = conn.collection(collectionName) + try { + const collectionName = file.key + const collection = conn.collection(collectionName) - const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) - data._id = file.path.split('\\').pop().split('.')[0] - await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) + const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) + data._id = file.path.split('\\').pop().split('.')[0] + await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) - progress.increment() + progress.increment() + } catch (err) { + progress.stop() + throw { err, file } + } } } diff --git a/lib/api/migrateToMongo/migrators/newMessage.js b/lib/api/migrateToMongo/migrators/newMessage.js index ee92ae5..dd6d44c 100644 --- a/lib/api/migrateToMongo/migrators/newMessage.js +++ b/lib/api/migrateToMongo/migrators/newMessage.js @@ -16,14 +16,19 @@ module.exports = async (instanceName, options, progressBars, conn) => { const progress = progressBars.create(files.length, 0) progress.update({ process: 'Messages' }) for (const file of files) { - const collectionName = file.key - const collection = conn.collection(collectionName) + try { + const collectionName = file.key + const collection = conn.collection(collectionName) - const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) - data._id = file.path.split('\\').pop().split('.')[0] - await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) + const data = JSON.parse(fs.readFileSync(file.path, 'utf8')) + data._id = file.path.split('\\').pop().split('.')[0] + await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) - progress.increment() + progress.increment() + } catch (err) { + progress.stop() + throw { err, file } + } } } diff --git a/package.json b/package.json index 981fbce..f645900 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "evolution-manager", "description": "Evolution Manager is an open-source interface for managing the Evolution API, simplifying the creation and administration of API instances with advanced features and diverse integrations.", - "version": "0.4.8", + "version": "0.4.9", "main": "dist", "engines": { "node": ">=16.0.0"