stats.gamesCompleted is now tracked in users

This commit is contained in:
Ruben Vereecken 2014-06-24 15:28:18 +02:00
parent 39fb2cb1b4
commit 7a4c6daec8
4 changed files with 46 additions and 3 deletions

View file

@ -78,7 +78,7 @@ module.exports = class AchievementEditView extends View
elementPosition: 'bottom center'
hideDuration: 0
showDuration: 0
l
$('#achievement-view-inner').notify data, options
openSaveModal: ->

View file

@ -4,6 +4,7 @@ mongoose = require('mongoose')
plugins = require('../../plugins/plugins')
AchievablePlugin = require '../../plugins/achievements'
jsonschema = require('../../../app/schemas/models/level_session')
log = require 'winston'
LevelSessionSchema = new mongoose.Schema({
created:
@ -20,8 +21,26 @@ LevelSessionSchema.pre 'init', (next) ->
@set(prop, _.cloneDeep(sch.default)) if sch.default?
next()
previous = {}
LevelSessionSchema.post 'init', (doc) ->
previous[doc.get 'id'] =
'state.completed': doc.get 'state.completed'
LevelSessionSchema.pre 'save', (next) ->
@set('changed', new Date())
id = @get('id')
initd = id of previous
# newly completed level
if not (initd and previous[id]['state.completed']) and @get('state.completed')
User = require '../../users/User' # Avoid mutual inclusion cycles
User.update {_id: @get 'creator'}, {$inc: {'stats.gamesCompleted': 1}}, {}, (err, count) ->
log.error err if err?
delete previous[id] if initd
next()
module.exports = LevelSession = mongoose.model('level.session', LevelSessionSchema)
module.exports = LevelSession = mongoose.model('level.session', LevelSessionSchema)

View file

@ -55,7 +55,7 @@ AchievablePlugin = (schema, options) ->
wrapUp = ->
# Update user's experience points
User.update({_id: userID}, {$inc: {points: earnedPoints}}, {}, (err, count) ->
console.error err if err?
log.error err if err?
)
if isRepeatable

View file

@ -268,3 +268,27 @@ describe 'GET /db/user', ->
expect(response.statusCode).toBe(422)
done()
)
describe 'statistics', ->
it 'games completed', (done) ->
LevelSession = require '../../../server/levels/sessions/LevelSession'
User = require '../../../server/users/User'
session = new LevelSession
name: 'Beat Gandalf'
permissions: simplePermissions
state: completed: true
unittest.getNormalJoe (joe) ->
expect(joe.get 'stats.gamesCompleted').toBeUndefined()
session.set 'creator', joe.get 'id'
session.save (err) ->
expect(err).toBeNull()
User.findOne {_id: joe.get 'id'}, (err, guy) ->
expect(err).toBeNull()
expect(guy.get 'id').toBe joe.get 'id'
expect(guy.get 'stats.gamesCompleted').toBe 1
done()