Fix migration error handling and add data validation

This commit is contained in:
Gabriel Pastori 2023-12-20 00:11:51 -03:00
parent c6b743a9b8
commit 2d54cec268
7 changed files with 85 additions and 44 deletions

View File

@ -83,9 +83,17 @@ module.exports = async () => {
} }
]; ];
// get folders from /instances
const answers = await inquirer.prompt(questions); 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 // connect to mongodb
console.log('\n\n🌱 Connecting to MongoDB...'); console.log('\n\n🌱 Connecting to MongoDB...');
@ -102,6 +110,7 @@ module.exports = async () => {
}, cliProgress.Presets.shades_classic); }, cliProgress.Presets.shades_classic);
instancesBar.start(answers.selectedInstances.length, 0); instancesBar.start(answers.selectedInstances.length, 0);
try {
for (const instanceName of answers.selectedInstances) { for (const instanceName of answers.selectedInstances) {
instancesBar.update({ instanceName }); instancesBar.update({ instanceName });
@ -117,12 +126,19 @@ module.exports = async () => {
instanceBars.stop(); instanceBars.stop();
instancesBar.increment(); instancesBar.increment();
} }
} catch (err) {
instancesBar.stop(); instancesBar.stop();
console.log(err.file);
console.log(err.err);
process.exit(1);
}
instancesBar.stop();
// disconnect from mongodb // disconnect from mongodb
console.log('\n\n🌱 Disconnecting from MongoDB...'); console.log('\n\n🌱 Disconnecting from MongoDB...');
await conn.close(); await conn.close();
if (connInstance) await connInstance.close();
console.log('🌱 Disconnected from MongoDB!\n\n'); console.log('🌱 Disconnected from MongoDB!\n\n');
console.log('🌱 Migration completed!\n\n'); console.log('🌱 Migration completed!\n\n');

View File

@ -16,6 +16,7 @@ module.exports = async (instanceName, options, progressBars, conn) => {
const progress = progressBars.create(files.length, 0) const progress = progressBars.create(files.length, 0)
progress.update({ process: 'Chats' }) progress.update({ process: 'Chats' })
for (const file of files) { for (const file of files) {
try {
const collectionName = file.key const collectionName = file.key
const collection = conn.collection(collectionName) const collection = conn.collection(collectionName)
@ -24,6 +25,10 @@ module.exports = async (instanceName, options, progressBars, conn) => {
await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true })
progress.increment() progress.increment()
} catch (err) {
progress.stop()
throw { err, file }
}
} }
} }

View File

@ -16,6 +16,7 @@ module.exports = async (instanceName, options, progressBars, conn) => {
const progress = progressBars.create(files.length, 0) const progress = progressBars.create(files.length, 0)
progress.update({ process: 'Contacts' }) progress.update({ process: 'Contacts' })
for (const file of files) { for (const file of files) {
try {
const collectionName = file.key const collectionName = file.key
const collection = conn.collection(collectionName) const collection = conn.collection(collectionName)
@ -24,6 +25,10 @@ module.exports = async (instanceName, options, progressBars, conn) => {
await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true })
progress.increment() progress.increment()
} catch (err) {
progress.stop()
throw { err, file }
}
} }
} }

View File

@ -30,6 +30,7 @@ module.exports = async (instanceName, options, progressBars, conn, connInstance)
const progress = progressBars.create(files.length, 0) const progress = progressBars.create(files.length, 0)
progress.update({ process: 'Instance' }) progress.update({ process: 'Instance' })
for (const file of files) { for (const file of files) {
try {
const collectionName = file.key || instanceName const collectionName = file.key || instanceName
const collection = (!file.secondaryConnection ? conn : connInstance).collection(collectionName) const collection = (!file.secondaryConnection ? conn : connInstance).collection(collectionName)
@ -37,6 +38,10 @@ module.exports = async (instanceName, options, progressBars, conn, connInstance)
data._id = file.path.split('\\').pop().split('.')[0] data._id = file.path.split('\\').pop().split('.')[0]
await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true })
progress.increment() progress.increment()
} catch (err) {
progress.stop()
throw { err, file }
}
} }
} }

View File

@ -16,6 +16,7 @@ module.exports = async (instanceName, options, progressBars, conn) => {
const progress = progressBars.create(files.length, 0) const progress = progressBars.create(files.length, 0)
progress.update({ process: 'Message Update' }) progress.update({ process: 'Message Update' })
for (const file of files) { for (const file of files) {
try {
const collectionName = file.key const collectionName = file.key
const collection = conn.collection(collectionName) const collection = conn.collection(collectionName)
@ -24,6 +25,10 @@ module.exports = async (instanceName, options, progressBars, conn) => {
await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true })
progress.increment() progress.increment()
} catch (err) {
progress.stop()
throw { err, file }
}
} }
} }

View File

@ -16,6 +16,7 @@ module.exports = async (instanceName, options, progressBars, conn) => {
const progress = progressBars.create(files.length, 0) const progress = progressBars.create(files.length, 0)
progress.update({ process: 'Messages' }) progress.update({ process: 'Messages' })
for (const file of files) { for (const file of files) {
try {
const collectionName = file.key const collectionName = file.key
const collection = conn.collection(collectionName) const collection = conn.collection(collectionName)
@ -24,6 +25,10 @@ module.exports = async (instanceName, options, progressBars, conn) => {
await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true }) await collection.findOneAndUpdate({ _id: data._id }, { $set: data }, { upsert: true })
progress.increment() progress.increment()
} catch (err) {
progress.stop()
throw { err, file }
}
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "evolution-manager", "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.", "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", "main": "dist",
"engines": { "engines": {
"node": ">=16.0.0" "node": ">=16.0.0"