Leaderboard is starting to work

This commit is contained in:
Michael Schmatz 2014-02-13 15:02:49 -08:00
parent 40c26bb395
commit 480de71eb6
3 changed files with 34 additions and 9 deletions

View file

@ -20,7 +20,9 @@ class LeaderboardCollection extends CocoCollection
constructor: (level, options) ->
super()
options ?= {}
@url = "/db/level/#{level.get('original')}.#{level.get('version').major}/leaderboard?#{$.param(options)}"
#@url = "/db/level/#{level.get('original')}.#{level.get('version').major}/leaderboard?#{$.param(options)}"
@url = "/db/level/#{level.get('original')}/leaderboard?#{$.param(options)}"
module.exports = class LadderView extends RootView
id: 'ladder-view'
@ -38,7 +40,8 @@ module.exports = class LadderView extends RootView
@sessions.once 'sync', @onMySessionsLoaded, @
onLevelLoaded: -> @startLoadingPhaseTwoMaybe()
onMySessionsLoaded: -> @startLoadingPhaseTwoMaybe()
onMySessionsLoaded: ->
@startLoadingPhaseTwoMaybe()
startLoadingPhaseTwoMaybe: ->
return unless @level.loaded and @sessions.loaded
@ -56,6 +59,7 @@ module.exports = class LadderView extends RootView
@challengers = {}
for team in teams
teamSession = _.find @sessions.models, (session) -> session.get('team') is team
console.log "Team session: #{JSON.stringify teamSession}"
@leaderboards[team] = new LeaderboardData(@level, team, teamSession)
@leaderboards[team].once 'sync', @onLeaderboardLoaded, @
@challengers[team] = new ChallengersData(@level, team, teamSession)
@ -100,7 +104,7 @@ class LeaderboardData
@topPlayers.once 'sync', @leaderboardPartLoaded, @
if @session
score = @session.get('score') or 25
score = @session.get('totalScore') or 25
@playersAbove = new LeaderboardCollection(@level, {order:1, scoreOffset: score, limit: 4, team: @team})
@playersAbove.fetch()
@playersAbove.once 'sync', @leaderboardPartLoaded, @
@ -120,7 +124,7 @@ class LeaderboardData
class ChallengersData
constructor: (@level, @team, @session) ->
_.extend @, Backbone.Events
score = @session?.get('score') or 25
score = @session?.get('totalScore') or 25
@easyPlayer = new LeaderboardCollection(@level, {order:1, scoreOffset: score - 5, limit: 1, team: @team})
@easyPlayer.fetch()
@easyPlayer.once 'sync', @challengerLoaded, @

View file

@ -70,10 +70,10 @@ LevelHandler = class LevelHandler extends Handler
sessionQuery = {
level: {original: level.original.toString(), majorVersion: level.version.major}
creator: req.user.id
#creator: req.user.id
submitted: true
}
Session.find(sessionQuery).exec (err, results) =>
Session.find sessionQuery, '_id totalScore submitted team creatorName', (err, results) =>
return @sendDatabaseError(res, err) if err
res.send(results)
res.end()
@ -83,7 +83,28 @@ LevelHandler = class LevelHandler extends Handler
# [original, version] = id.split('.')
# version = parseInt version
# console.log 'get leaderboard for', original, version, req.query
return res.send([])
@getDocumentForIdOrSlug id, (err, level) =>
return @sendDatabaseError(res, err) if err
return @sendNotFoundError(res) unless level?
return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, level)
if parseInt(req.query.order) is 1
scoreQuery = {"$gte":parseFloat req.query.scoreOffset}
else
scoreQuery = {"$lte": parseFloat req.query.scoreOffset}
sessionsQuery =
level: {original: level.original.toString(), majorVersion: level.version.major}
team: req.query.team
totalScore: scoreQuery
submitted: true
console.log sessionsQuery
query = Session.find(sessionsQuery).sort({"totalScore":parseInt(req.query.order)}).limit(parseInt req.query.limit)
Session.find sessionsQuery, '_id totalScore submitted team creatorName', (err, resultSessions) =>
return @sendDatabaseError(res, err) if err
if resultSessions
return @sendSuccess res, resultSessions
res.send([])
getFeedback: (req, res, id) ->
@getDocumentForIdOrSlug id, (err, level) =>

View file

@ -39,7 +39,7 @@ module.exports.createNewTask = (req, res) ->
LevelSession.find { "levelID": "project-dota", "submitted": true}, (err, submittedSessions) ->
taskPairs = []
for session in submittedSessions
if String(session._id) isnt req.body.session
if String(session._id) isnt req.body.session and session.team isnt sessionToScore.team
taskPairs.push [req.body.session,String session._id]
async.each taskPairs, sendTaskPairToQueue, (taskPairError) ->
return errors.serverError res, "There was an error sending the task pairs to the queue" if taskPairError?