intermediate

This commit is contained in:
Ruben Vereecken 2014-06-25 20:04:39 +02:00
parent 838012a2cf
commit b951205681
4 changed files with 54 additions and 10 deletions

View file

@ -8,7 +8,6 @@ ArticleSchema.plugin(plugins.VersionedPlugin)
ArticleSchema.plugin(plugins.SearchablePlugin, {searchable: ['body', 'name']})
ArticleSchema.plugin(plugins.PatchablePlugin)
# Assumes every article save is a new version
ArticleSchema.pre 'save', (next) ->
return next() unless @get('creator')

View file

@ -21,5 +21,16 @@ LevelSchema.pre 'init', (next) ->
LevelSchema.post 'init', (doc) ->
if _.isString(doc.get('nextLevel'))
doc.set('nextLevel', undefined)
# Assumes every level save is a new level
LevelSchema.pre 'save', (next) ->
return next() unless @get('creator')
User = require '../users/User' # Avoid mutual inclusion cycles
userID = @get('creator').toHexString()
User.update {_id: userID}, {$inc: 'stats.levelEdits': 1}, {}, (err, docs) ->
log.error err if err?
next()
module.exports = Level = mongoose.model('level', LevelSchema)

View file

@ -256,6 +256,16 @@ module.exports.VersionedPlugin = (schema) ->
)
)
schema.pre 'save', (next) ->
return next() unless @get('creator')
User = require '../users/User' # Avoid mutual inclusion cycles
userID = @get('creator').toHexString()
User.update {_id: userID}, {$inc: 'stats.levelEdits': 1}, {}, (err, docs) ->
log.error err if err?
next()
module.exports.SearchablePlugin = (schema, options) ->
# this plugin must be added only after the others (specifically Versioned and Permissions)

View file

@ -375,6 +375,23 @@ UserHandler = class UserHandler extends Handler
return @sendNotFoundError res unless remark?
@sendSuccess res, remark
countEdits = (model, statKey, done) ->
User.find {}, (err, users) ->
async.eachSeries users, ((user, doneWithUser) ->
userID = user.get('_id').toHexString()
model.count {creator: userID}, (err, count) ->
if count
update = $set: {}
update.$set[statKey] = count
else
update = $unset: {}
update.$unset[statKey] = ''
User.findByIdAndUpdate user.get('_id'), update, (err) ->
log.error err if err?
doneWithUser()
), done
statHandlers:
gamesCompleted: (done) ->
LevelSession = require '../levels/sessions/LevelSession'
@ -392,17 +409,24 @@ UserHandler = class UserHandler extends Handler
articleEdits: (done) ->
Article = require '../articles/Article'
countEdits Article, 'stats.articleEdits', done
User.find {}, (err, users) ->
async.eachSeries users, ((user, doneWithUser) ->
userID = user.get('_id').toHexString()
levelEdits: (done) ->
Level = require '../levels/Level'
countEdits Level, 'stats.levelEdits', done
levelComponentEdits: (done) ->
LevelComponent = require '../levels/components/LevelComponent'
countEdits LevelComponent, 'stats.levelComponentEdits', done
levelSystemEdits: (done) ->
LevelSystem = require '../levels/systems/LevelSystem'
countEdits LevelSystem, 'stats.levelSystemEdits', done
thangTypeEdits: (done) ->
ThangType = require '../levels/thangs/ThangType'
countEdits ThangType, 'stats.thangTypeEdits', done
Article.count {creator: userID}, (err, count) ->
update = if count then {$set: 'stats.articleEdits': count} else {$unset: 'stats.articleEdits': ''}
User.findByIdAndUpdate user.get('_id'), update, (err) ->
log.error err if err?
doneWithUser()
), done
recalculate: (req, res, statName) ->
return @sendForbiddenError(res) unless req.user.isAdmin()