mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 00:40:56 -05:00
stats.gamesCompleted is now tracked in users
This commit is contained in:
parent
39fb2cb1b4
commit
7a4c6daec8
4 changed files with 46 additions and 3 deletions
|
@ -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: ->
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue