mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-07 02:25:29 -04:00
Leaderboard is starting to work
This commit is contained in:
parent
40c26bb395
commit
480de71eb6
3 changed files with 34 additions and 9 deletions
|
@ -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, @
|
||||
|
|
|
@ -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) =>
|
||||
|
|
|
@ -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?
|
||||
|
|
Loading…
Add table
Reference in a new issue