This commit is contained in:
Nick Winter 2014-04-14 14:49:42 -07:00
commit 2b7e629c7f
3 changed files with 38 additions and 30 deletions

View file

@ -204,6 +204,14 @@ module.exports = class PlayView extends View
image: '/file/db/level/526fd3043c637ece50001bb2/the_herd_icon.png'
description: "Transfer a stack of ogres while preserving their honor. - by Alexandru"
}
{
name: 'Find the Spy'
difficulty: 2
id: 'find-the-spy'
image: '/file/db/level/526ae95c1e5cd30000000008/zone_of_danger_icon.png'
description: "Identify the spies hidden among your soldiers - by Nathan Gossett"
}
#{
# name: 'Enemy Artillery'
# difficulty: 1

View file

@ -5,7 +5,7 @@ SessionHandler = require('./sessions/level_session_handler')
Feedback = require('./feedbacks/LevelFeedback')
Handler = require('../commons/Handler')
mongoose = require('mongoose')
async = require 'async'
LevelHandler = class LevelHandler extends Handler
modelClass: Level
jsonSchema: require '../../app/schemas/models/level'
@ -220,7 +220,7 @@ LevelHandler = class LevelHandler extends Handler
userMap[u._id] = u[serviceProperty] for u in userResults
session[serviceProperty] = userMap[session.creator] for session in sessionResults
res.send(sessionResults)
getRandomSessionPair: (req, res, slugOrID) ->
findParameters = {}
if Handler.isID slugOrID
@ -235,32 +235,34 @@ LevelHandler = class LevelHandler extends Handler
query.exec (err, level) =>
return @sendDatabaseError(res, err) if err
return @sendNotFoundError(res) unless level?
sessionsQueryParameters =
level:
original: level.original.toString()
majorVersion: level.version.major
submitted:true
query = Session
.find(sessionsQueryParameters)
.select('team')
.lean()
query.exec (err, resultSessions) =>
return @sendDatabaseError res, err if err? or not resultSessions
teamSessions = _.groupBy resultSessions, 'team'
sessions = []
numberOfTeams = 0
for team of teamSessions
numberOfTeams += 1
sessions.push _.sample(teamSessions[team])
if numberOfTeams != 2 then return @sendDatabaseError res, "There aren't sessions of 2 teams, so cannot choose random opponents!"
@sendSuccess res, sessions
query = Session.find(sessionsQueryParameters).distinct("team")
query.exec (err, teams) =>
return @sendDatabaseError res, err if err? or not teams
findTop20Players = (sessionQueryParams, team, cb) ->
sessionQueryParams["team"] = team
Session.aggregate [
{$match: sessionQueryParams}
{$project: {"totalScore":1}}
{$sort: {"totalScore":-1}}
{$limit: 20}
], cb
async.map teams, findTop20Players.bind(@, sessionsQueryParameters), (err, map) =>
if err? then return @sendDatabaseError(res, err)
sessions = []
for mapItem in map
sessions.push _.sample(mapItem)
if map.length != 2 then return @sendDatabaseError res, "There aren't sessions of 2 teams, so cannot choose random opponents!"
@sendSuccess res, sessions
getFeedback: (req, res, id) ->
return @sendNotFoundError(res) unless req.user
@fetchLevelByIDAndHandleErrors id, req, res, (err, level) =>

View file

@ -165,13 +165,11 @@ UserHandler = class UserHandler extends Handler
simulatedByQuery[if req.query.order is 1 then "$gt" else "$lte"] = req.query.scoreOffset
query.simulatedBy = simulatedByQuery
sortOrder = 1 if req.query.order is 1
aggregation = User.aggregate [
{$match: query}
{$project:{"name":1, "simulatedBy": 1, "simulatedFor":1}}
{$sort: {"simulatedBy":sortOrder}}
{$limit: limit}
]
aggregation.exec (err, otherUsers) ->
else
query.simulatedBy = {"$exists": true}
leaderboardQuery = User.find(query).select("name simulatedBy simulatedFor").sort({"simulatedBy":sortOrder}).limit(limit)
leaderboardQuery.exec (err, otherUsers) ->
otherUsers = _.reject otherUsers, _id: req.user._id if req.query.scoreOffset isnt -1
otherUsers ?= []
res.send(otherUsers)