Add user.courseInstances, use it for course ladders

This commit is contained in:
Nick Winter 2015-11-19 10:41:31 -08:00
parent bc1b11df94
commit c8ceca4d3d
5 changed files with 9 additions and 8 deletions

View file

@ -316,6 +316,7 @@ _.extend UserSchema.properties,
country: { type: 'string', enum: ['brazil', 'china'] } # New, supports multiple countries for different versions--only set for specific countries where we have premium servers right now
clans: c.array {}, c.objectId()
courseInstances: c.array {}, c.objectId()
currentCourse: c.object {}, { # Old, can be removed after we deploy and delete it from all users
courseID: c.objectId({})
courseInstanceID: c.objectId({})

View file

@ -26,7 +26,7 @@ block content
if leagueType === 'clan'
h1.league-header
a(href="/#{leagueType == 'clan' ? 'clans' : leagueType}/#{league.id}")= league.get('name')
a(href="/clans/#{league.id}")= league.get('name')
span.spl(data-i18n="ladder.league") League
if level.get('name') == 'Greed'

View file

@ -73,10 +73,8 @@ module.exports = class PlayAchievementsModal extends ModalView
@onEverythingLoaded()
onEverythingLoaded: =>
console.log 'got achievements', m.attributes for m in @achievements.models
@achievements.set(@achievements.filter((m) -> m.get('collection') isnt 'level.sessions' or m.get('query')?.team))
for achievement in @achievements.models
console.log 'kept achievement', achievement.attributes
if earned = @earnedMap[achievement.id]
achievement.earned = earned
achievement.earnedDate = earned.getCreationDate()

View file

@ -60,7 +60,7 @@ CourseInstanceHandler = class CourseInstanceHandler extends Handler
courseInstance.save (err, courseInstance) =>
return @sendDatabaseError(res, err) if err
@sendCreated(res, courseInstance)
addMember: (req, res, courseInstanceID) ->
userID = req.body.userID
return @sendBadInputError(res, 'Input must be a MongoDB ID') unless utils.isID(userID)
@ -88,8 +88,10 @@ CourseInstanceHandler = class CourseInstanceHandler extends Handler
courseInstance.set('members', members)
courseInstance.save (err, courseInstance) =>
return @sendDatabaseError(res, err) if err
@sendSuccess(res, @formatEntity(req, courseInstance))
User.update {_id: mongoose.Types.ObjectId(userID)}, {$addToSet: {courseInstances: courseInstance.get('_id')}}, (err) =>
return @sendDatabaseError(res, err) if err
@sendSuccess(res, @formatEntity(req, courseInstance))
post: (req, res) ->
return @sendBadInputError(res, 'No classroomID') unless req.body.classroomID
return @sendBadInputError(res, 'No courseID') unless req.body.courseID
@ -101,7 +103,7 @@ CourseInstanceHandler = class CourseInstanceHandler extends Handler
return @sendDatabaseError(res, err) if err
return @sendNotFoundError(res, 'Course not found') unless course
super(req, res)
makeNewInstance: (req) ->
doc = new CourseInstance({
members: []

View file

@ -38,7 +38,7 @@ getRandomSessions = (user, callback) ->
# Only people in a league will end up simulating internal league matches (for leagues they're in) except by dumb chance.
# If we don't like that, we can rework sampleByLevel to have an opportunity to switch to internal leagues if the first session had a league affiliation.
leagueIDs = user?.get('clans') or []
#leagueIDs = leagueIDs.concat user?.get('courseInstances') or []
leagueIDs = leagueIDs.concat user?.get('courseInstances') or []
leagueIDs = (leagueID + '' for leagueID in leagueIDs) # Make sure to fetch them as strings.
return sampleByLevel callback unless leagueIDs.length and Math.random() > 1 / leagueIDs.length
leagueID = _.sample leagueIDs