You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
const {promises: fs} = require('fs')
|
|
const easypost = new (require('@easypost/api'))(process.env.EASYPOST_API_KEY);
|
|
|
|
module.exports = async function doImport(oldDB, path) {
|
|
const items = await oldDB.sock.find().lean().exec()
|
|
const users = await oldDB.user.find({email: {$exists: true}}).populate('purchases').lean().exec()
|
|
const carts = users.map(u => u.purchases).flat()
|
|
|
|
console.log(`Loaded ${carts.length} purchases from ${users.length} users`)
|
|
|
|
let count = 1;
|
|
for(const user of users){
|
|
delete user._id
|
|
delete user.__v,
|
|
delete user.password,
|
|
delete user.emailPin
|
|
delete user.cart
|
|
|
|
process.stdout.clearLine();
|
|
process.stdout.cursorTo(0);
|
|
|
|
process.stdout.write(`Retrieving details for ${user.email} (${count++}/${users.length}) `)
|
|
|
|
for(const cart of user.purchases){
|
|
delete cart._id
|
|
delete cart.__v
|
|
|
|
cart.items = cart.items.map(id => items.find(item => item._id.toString() === id.toString()).urlslug)
|
|
shipmentPromise = easypost.Shipment.retrieve(cart.shipment)
|
|
addressPromise = easypost.Address.retrieve(cart.address)
|
|
|
|
cart.shipment = await shipmentPromise
|
|
cart.address = await addressPromise
|
|
}
|
|
}
|
|
|
|
process.stdout.clearLine();
|
|
process.stdout.cursorTo(0);
|
|
process.stdout.write(`All address + shipment info retrieved, writing data file`)
|
|
|
|
fs.writeFile(path, JSON.stringify(users, null, 2))
|
|
}
|