// Add externally purchased subscriptions // Usage: // Edit hard coded data below. // mongo <address>:<port>/<database> <script file> -u <username> -p <password> // Skips duplicate payments, but this might be incorrect depending on the scenario // TODO: output emails not found var emails = ['pam@fred.com', 'Bob@fred.com']; var purchaserID = ''; // leave blank to use ID of user of first email address var endDate = ''; // '2016-06-28' or blank for auto-3-months var gems = 10500; var amount = 2997; var service = 'paypal'; // 'external', etc. emails = emails.map(function(e) { return e.toLowerCase();}); if (!purchaserID) { var purchaser = db.users.findOne({emailLower: emails[0]}); purchaserID = purchaser._id + ''; } if (!endDate) { var date = new Date(); var newMonth = date.getMonth() + 3; if (newMonth >= 12) { newMonth -= 12; date.setFullYear(date.getFullYear() + 1); } date.setMonth(newMonth); endDate = date.toISOString().substring(0, 10); } log("Input Data"); log("service\t" + service); log("purchaserID\t" + purchaserID); log("end date\t" + endDate); log("gems\t" + gems); log("amount\t" + amount); log("emails"); log(emails); // 1. Set free = endDate, updated purchased.gems db.users.update( {emailLower: {$in: emails}, "stripe.free": {$ne: endDate}}, { $set: { "stripe.free": endDate }, $inc: { "purchased.gems": gems } }, { multi: true } ); // 2. create Payment objects var cursor = db.users.find({emailLower: {$in: emails}}); while (cursor.hasNext()) { var doc = cursor.next(); var criteria = { purchaser: ObjectId(purchaserID), recipient: doc._id, service: service, gems: gems, amount: amount } if (db.payments.findOne(criteria)) { log("Already have a payment for " + doc.email); } else { db.payments.insert(criteria); log("Added payment for " + doc.email); } } function log(str) { print(new Date().toISOString() + " " + str); }