codecombat/scripts/mongodb/addExternalSubs.js

87 lines
2 KiB
JavaScript
Raw Normal View History

2015-02-26 11:44:53 -05:00
// 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
2015-02-26 11:44:53 -05:00
var gems = 10500;
var amount = 2997;
var service = 'paypal'; // 'external', etc.
2015-02-26 11:44:53 -05:00
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);
}
2015-02-26 11:44:53 -05:00
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);
}