mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
Added a script to recalculate all gems purchased.
This commit is contained in:
parent
5b39c6bb19
commit
1ba79b83a9
3 changed files with 62 additions and 2 deletions
55
scripts/recalculatePayments.coffee
Normal file
55
scripts/recalculatePayments.coffee
Normal file
|
@ -0,0 +1,55 @@
|
|||
database = require '../server/commons/database'
|
||||
mongoose = require 'mongoose'
|
||||
log = require 'winston'
|
||||
async = require 'async'
|
||||
|
||||
### SET UP ###
|
||||
do (setupLodash = this) ->
|
||||
GLOBAL._ = require 'lodash'
|
||||
_.str = require 'underscore.string'
|
||||
_.mixin _.str.exports()
|
||||
GLOBAL.tv4 = require('tv4').tv4
|
||||
|
||||
database.connect()
|
||||
|
||||
User = require '../server/users/User'
|
||||
Payment = require '../server/payments/Payment'
|
||||
PaymentHandler = require '../server/payments/payment_handler'
|
||||
|
||||
t0 = new Date().getTime()
|
||||
total = 100000
|
||||
#testUsers = ['livelily+test31@gmail.com', 'livelily+test37@gmail.com']
|
||||
if testUsers?
|
||||
userQuery = emailLower: {$in: testUsers}
|
||||
else
|
||||
userQuery = $or: [
|
||||
{stripe: {$exists: true}}
|
||||
{'purchased.gems': {$gt: 0}}
|
||||
]
|
||||
User.count userQuery, (err, count) -> total = count
|
||||
|
||||
onFinished = ->
|
||||
t1 = new Date().getTime()
|
||||
runningTime = ((t1-t0)/1000/60/60).toFixed(2)
|
||||
console.log "we finished in #{runningTime} hours"
|
||||
process.exit()
|
||||
|
||||
userStream = User.find(userQuery).sort('_id').stream()
|
||||
streamFinished = false
|
||||
usersTotal = 0
|
||||
usersFinished = 0
|
||||
numberRunning = 0
|
||||
doneWithUser = ->
|
||||
++usersFinished
|
||||
numberRunning -= 1
|
||||
userStream.resume()
|
||||
onFinished?() if streamFinished and usersFinished is usersTotal
|
||||
|
||||
userStream.on 'error', (err) -> log.error err
|
||||
userStream.on 'close', -> streamFinished = true
|
||||
userStream.on 'data', (user) ->
|
||||
++usersTotal
|
||||
numberRunning += 1
|
||||
userStream.pause() if numberRunning > 20
|
||||
user._id = user.get('_id')
|
||||
PaymentHandler.recalculateGemsFor user, doneWithUser, true
|
|
@ -124,6 +124,7 @@ class EarnedAchievementHandler extends Handler
|
|||
res.send(earnedAchievements)
|
||||
|
||||
recalculate: (req, res) ->
|
||||
return @sendForbiddenError(res) unless req.user?.isAdmin()
|
||||
onSuccess = (data) => log.debug 'Finished recalculating achievements'
|
||||
if 'achievements' of req.body # Support both slugs and IDs separated by commas
|
||||
achievementSlugsOrIDs = req.body.achievements
|
||||
|
|
|
@ -351,16 +351,20 @@ PaymentHandler = class PaymentHandler extends Handler
|
|||
else
|
||||
user.update({$inc: {'purchased.gems': gems}}, {}, (err) -> done(err))
|
||||
|
||||
recalculateGemsFor: (user, done) ->
|
||||
recalculateGemsFor: (user, done, saveIfUnchanged=true) ->
|
||||
|
||||
Payment.find({recipient: user._id}).select('gems').exec((err, payments) ->
|
||||
gems = _.reduce payments, ((sum, p) -> sum + p.get('gems')), 0
|
||||
purchased = _.clone(user.get('purchased'))
|
||||
purchased ?= {}
|
||||
if (purchased.gems or 0) isnt gems
|
||||
log.debug "Updating #{user.get('_id')} gems from #{purchased.gems} to #{gems} from #{payments.length} payments; #{user.get('email')} #{user.get('name')}"
|
||||
else unless saveIfUnchanged
|
||||
log.debug "#{user.get('_id')} already had #{purchased.gems} #{gems} from #{payments.length} payments; #{user.get('email')} #{user.get('name')}"
|
||||
return done()
|
||||
purchased.gems = gems
|
||||
user.set('purchased', purchased)
|
||||
user.save((err) -> done(err))
|
||||
|
||||
)
|
||||
|
||||
sendPaymentHipChatMessage: (options) ->
|
||||
|
|
Loading…
Reference in a new issue