mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-27 09:35:39 -05:00
Added the recalculation script for a couple of statistics
This commit is contained in:
parent
ebfe1fc1c0
commit
2394bd8129
4 changed files with 52 additions and 11 deletions
35
scripts/recalculateStatistics.coffee
Normal file
35
scripts/recalculateStatistics.coffee
Normal file
|
@ -0,0 +1,35 @@
|
|||
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()
|
||||
|
||||
database.connect()
|
||||
|
||||
### USER STATS ###
|
||||
UserHandler = require '../server/users/user_handler'
|
||||
|
||||
report = (func, name, done) ->
|
||||
log.info 'Started ' + name + '...'
|
||||
func name, (err) ->
|
||||
log.warn err if err?
|
||||
log.info 'Finished ' + name
|
||||
done err if done?
|
||||
|
||||
whenAllFinished = ->
|
||||
log.info 'All recalculations finished.'
|
||||
process.exit()
|
||||
|
||||
async.series [
|
||||
(c) -> report UserHandler.recalculateAsync, 'gamesCompleted', c
|
||||
(c) -> report UserHandler.recalculateAsync, 'articleEdits', c
|
||||
(c) -> report UserHandler.recalculateAsync, 'levelEdits', c
|
||||
(c) -> report UserHandler.recalculateAsync, 'levelComponentEdits', c
|
||||
(c) -> report UserHandler.recalculateAsync, 'levelSystemEdits', c
|
||||
(c) -> report UserHandler.recalculateAsync, 'thangTypeEdits', c
|
||||
], whenAllFinished
|
|
@ -407,7 +407,7 @@ UserHandler = class UserHandler extends Handler
|
|||
doneWithUser()
|
||||
), done
|
||||
|
||||
statHandlers:
|
||||
statRecalculators:
|
||||
gamesCompleted: (done) ->
|
||||
LevelSession = require '../levels/sessions/LevelSession'
|
||||
|
||||
|
@ -442,14 +442,15 @@ UserHandler = class UserHandler extends Handler
|
|||
ThangType = require '../levels/thangs/ThangType'
|
||||
countEdits ThangType, done
|
||||
|
||||
recalculateAsync: (statName, done) =>
|
||||
return new Error 'Recalculation handler not found' unless statName of @statRecalculators
|
||||
@statRecalculators[statName] done
|
||||
|
||||
recalculate: (req, res, statName) ->
|
||||
return @sendForbiddenError(res) unless req.user.isAdmin()
|
||||
|
||||
if statName of @statHandlers
|
||||
@statHandlers[statName]()
|
||||
return @sendAccepted res, {}
|
||||
else return @sendNotFoundError(res)
|
||||
|
||||
log.debug 'recalculate'
|
||||
return @sendNotFoundError(res) unless statName of @statRecalculators
|
||||
@recalculateAsync statName
|
||||
@sendAccepted res, {}
|
||||
|
||||
module.exports = new UserHandler()
|
||||
|
|
|
@ -15,7 +15,7 @@ describe 'recalculate statistics', ->
|
|||
expect(res.statusCode).toBe 202
|
||||
done()
|
||||
|
||||
xit 'responds with a 404 if handler not found', (done) ->
|
||||
it 'responds with a 404 if handler not found', (done) ->
|
||||
loginAdmin ->
|
||||
request.post {uri:getURL '/admin/blobfish/swim'}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe 404
|
||||
|
@ -32,3 +32,8 @@ describe 'recalculate statistics', ->
|
|||
request.post {uri:url + 'ballsKicked'}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe 404
|
||||
done()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -364,7 +364,7 @@ describe 'Statistics', ->
|
|||
expect(err).toBeNull()
|
||||
expect(guy.get 'stats.gamesCompleted').toBeUndefined()
|
||||
|
||||
UserHandler.statHandlers.gamesCompleted ->
|
||||
UserHandler.statRecalculators.gamesCompleted ->
|
||||
User.findById joe.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get 'stats.gamesCompleted').toBe 1
|
||||
|
@ -406,7 +406,7 @@ describe 'Statistics', ->
|
|||
expect(err).toBeNull()
|
||||
expect(guy.get User.statsMapping.edits.article).toBeUndefined()
|
||||
|
||||
UserHandler.statHandlers.articleEdits ->
|
||||
UserHandler.statRecalculators.articleEdits ->
|
||||
User.findById carl.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get User.statsMapping.edits.article).toBe 2
|
||||
|
@ -439,7 +439,7 @@ describe 'Statistics', ->
|
|||
expect(err).toBeNull()
|
||||
expect(guy.get User.statsMapping.edits.level).toBeUndefined()
|
||||
|
||||
UserHandler.statHandlers.levelEdits ->
|
||||
UserHandler.statRecalculators.levelEdits ->
|
||||
User.findById jose.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get User.statsMapping.edits.level).toBe 1
|
||||
|
|
Loading…
Reference in a new issue