mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-30 10:56:53 -05:00
86 lines
2 KiB
JavaScript
86 lines
2 KiB
JavaScript
// 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);
|
|
}
|