Set up some new session handlers for the upcoming multiplayer, allowing one session for each team.

This commit is contained in:
Scott Erickson 2014-02-07 11:50:40 -08:00
parent 9105888685
commit fa809308b2

View file

@ -23,6 +23,7 @@ LevelHandler = class LevelHandler extends Handler
getByRelationship: (req, res, args...) ->
return @getSession(req, res, args[0]) if args[1] is 'session'
return @getAllSessions(req, res, args[0]) if args[1] is 'all_sessions'
return @getFeedback(req, res, args[0]) if args[1] is 'feedback'
return @sendNotFoundError(res)
@ -36,6 +37,9 @@ LevelHandler = class LevelHandler extends Handler
level: {original: level.original.toString(), majorVersion: level.version.major}
creator: req.user.id
}
sessionQuery.team = req.query.team if req.query.team
Session.findOne(sessionQuery).exec (err, doc) =>
return @sendDatabaseError(res, err) if err
if doc
@ -45,6 +49,7 @@ LevelHandler = class LevelHandler extends Handler
initVals = sessionQuery
initVals.state = {complete:false, scripts:{currentScript:null}} # will not save empty objects
initVals.permissions = [{target:req.user.id, access:'owner'}, {target:'public', access:'write'}]
initVals.team = req.query.team if req.query.team
session = new Session(initVals)
session.save (err) =>
return @sendDatabaseError(res, err) if err
@ -53,6 +58,22 @@ LevelHandler = class LevelHandler extends Handler
# associated with the handler, because the handler might return a different type
# of model, like in this case. Refactor to move that logic to the model instead.
getAllSessions: (req, res, id) ->
@getDocumentForIdOrSlug id, (err, level) =>
return @sendDatabaseError(res, err) if err
return @sendNotFoundError(res) unless level?
return @sendUnauthorizedError(res) unless @hasAccessToDocument(req, level)
sessionQuery = {
level: {original: level.original.toString(), majorVersion: level.version.major}
creator: req.user.id
}
Session.find(sessionQuery).exec (err, results) =>
return @sendDatabaseError(res, err) if err
res.send(results)
return res.end()
getFeedback: (req, res, id) ->
@getDocumentForIdOrSlug id, (err, level) =>
return @sendDatabaseError(res, err) if err