diff --git a/scripts/mongodb/stored/updatePrepaid.js b/scripts/mongodb/stored/updatePrepaid.js new file mode 100644 index 000000000..cc0c53615 --- /dev/null +++ b/scripts/mongodb/stored/updatePrepaid.js @@ -0,0 +1,73 @@ + +// Update a prepaid document, and the denormalized data on user documents +// Limits the properties allowed to be set, but does not perform validation on them. Use carefully! + +// Usage +// --------------- +// In mongo shell +// +// > db.loadServerScripts(); +// > updatePrepaid('', { endDate: "2017-07-01T00:00:00.000Z", maxRedeemers: 10 }); + +var updatePrepaid = function updatePrepaid(stringID, originalUpdate) { + try { + load('./bower_components/lodash/dist/lodash.js') + } + catch (e) { + print('Lodash could not be loaded, ensure you are in codecombat project directory.') + return; + } + + try { + var id = ObjectId(stringID); + } + catch (e) { + print('Invalid ObjectId given:', stringID); + return; + } + + var prepaid = db.prepaids.findOne({_id: id}); + if (!prepaid) { + print('Prepaid not found'); + return; + } + + print('Found prepaid', _.omit(prepaid, 'redeemers')); + print('Has', prepaid.redeemers.length, 'redeemers.'); + + var prepaidUpdate = _.pick(originalUpdate, 'maxRedeemers', 'startDate', 'endDate' ); + if (_.isEmpty(prepaidUpdate)) { + print('Skipping prepaid update, nothing to update.') + } + else { + print('Update prepaid', + JSON.stringify(prepaidUpdate, null, ' '), + db.prepaids.update( + {_id: id}, + { $set: prepaidUpdate } + ) + ) + } + + var userUpdate = _.pick(originalUpdate, 'startDate', 'endDate' ); + if (_.isEmpty(userUpdate)) { + print('Skipping user update, nothing to update.') + } + else { + print('Update users', + JSON.stringify(userUpdate, null, ' '), + db.users.update( + {'coursePrepaid._id': id}, + {$set: userUpdate}, + {multi: true} + ) + ); + } +}; + +db.system.js.save( + { + _id: 'updatePrepaid', + value: updatePrepaid + } +);