intermediate
This commit is contained in:
parent
838012a2cf
commit
b951205681
4 changed files with 54 additions and 10 deletions
server
|
@ -8,7 +8,6 @@ ArticleSchema.plugin(plugins.VersionedPlugin)
|
||||||
ArticleSchema.plugin(plugins.SearchablePlugin, {searchable: ['body', 'name']})
|
ArticleSchema.plugin(plugins.SearchablePlugin, {searchable: ['body', 'name']})
|
||||||
ArticleSchema.plugin(plugins.PatchablePlugin)
|
ArticleSchema.plugin(plugins.PatchablePlugin)
|
||||||
|
|
||||||
|
|
||||||
# Assumes every article save is a new version
|
# Assumes every article save is a new version
|
||||||
ArticleSchema.pre 'save', (next) ->
|
ArticleSchema.pre 'save', (next) ->
|
||||||
return next() unless @get('creator')
|
return next() unless @get('creator')
|
||||||
|
|
|
@ -21,5 +21,16 @@ LevelSchema.pre 'init', (next) ->
|
||||||
LevelSchema.post 'init', (doc) ->
|
LevelSchema.post 'init', (doc) ->
|
||||||
if _.isString(doc.get('nextLevel'))
|
if _.isString(doc.get('nextLevel'))
|
||||||
doc.set('nextLevel', undefined)
|
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)
|
module.exports = Level = mongoose.model('level', LevelSchema)
|
||||||
|
|
|
@ -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) ->
|
module.exports.SearchablePlugin = (schema, options) ->
|
||||||
# this plugin must be added only after the others (specifically Versioned and Permissions)
|
# this plugin must be added only after the others (specifically Versioned and Permissions)
|
||||||
|
|
|
@ -375,6 +375,23 @@ UserHandler = class UserHandler extends Handler
|
||||||
return @sendNotFoundError res unless remark?
|
return @sendNotFoundError res unless remark?
|
||||||
@sendSuccess res, 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:
|
statHandlers:
|
||||||
gamesCompleted: (done) ->
|
gamesCompleted: (done) ->
|
||||||
LevelSession = require '../levels/sessions/LevelSession'
|
LevelSession = require '../levels/sessions/LevelSession'
|
||||||
|
@ -392,17 +409,24 @@ UserHandler = class UserHandler extends Handler
|
||||||
|
|
||||||
articleEdits: (done) ->
|
articleEdits: (done) ->
|
||||||
Article = require '../articles/Article'
|
Article = require '../articles/Article'
|
||||||
|
countEdits Article, 'stats.articleEdits', done
|
||||||
|
|
||||||
User.find {}, (err, users) ->
|
levelEdits: (done) ->
|
||||||
async.eachSeries users, ((user, doneWithUser) ->
|
Level = require '../levels/Level'
|
||||||
userID = user.get('_id').toHexString()
|
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) ->
|
recalculate: (req, res, statName) ->
|
||||||
return @sendForbiddenError(res) unless req.user.isAdmin()
|
return @sendForbiddenError(res) unless req.user.isAdmin()
|
||||||
|
|
Reference in a new issue