forked from codecombat/codecombat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
recalculatePayments.coffee
55 lines (48 loc) · 1.48 KB
/
recalculatePayments.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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