mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-28 23:13:59 -04:00
First step towards fetching related by slug
This commit is contained in:
parent
735a7082ee
commit
cc7474538f
2 changed files with 34 additions and 23 deletions
server
|
@ -30,6 +30,10 @@ module.exports.NamedPlugin = (schema) ->
|
||||||
schema.add({name: String, slug: String})
|
schema.add({name: String, slug: String})
|
||||||
schema.index({'slug': 1}, {unique: true, sparse: true, name: 'slug index'})
|
schema.index({'slug': 1}, {unique: true, sparse: true, name: 'slug index'})
|
||||||
|
|
||||||
|
schema.statics.getBySlug = (slug, done) ->
|
||||||
|
@findOne {slug: slug}, (err, doc) ->
|
||||||
|
if err then done err else done doc
|
||||||
|
|
||||||
schema.pre('save', (next) ->
|
schema.pre('save', (next) ->
|
||||||
if schema.uses_coco_versions
|
if schema.uses_coco_versions
|
||||||
v = @get('version')
|
v = @get('version')
|
||||||
|
|
|
@ -239,31 +239,38 @@ UserHandler = class UserHandler extends Handler
|
||||||
documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
|
documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
|
||||||
@sendSuccess(res, documents)
|
@sendSuccess(res, documents)
|
||||||
|
|
||||||
getLevelSessions: (req, res, userID) ->
|
IDify: (idOrSlug, done) ->
|
||||||
query = creator: userID
|
if Handler.isID idOrSlug
|
||||||
isAuthorized = req.user._id+'' is userID or req.user.isAdmin()
|
done idOrSlug
|
||||||
projection = {}
|
else
|
||||||
if req.query.project
|
User.getBySlug idOrSlug, (user) -> done user?.get '_id'
|
||||||
projection[field] = 1 for field in req.query.project.split(',') when isAuthorized or not (field in LevelSessionHandler.privateProperties)
|
|
||||||
else unless isAuthorized
|
|
||||||
projection[field] = 0 for field in LevelSessionHandler.privateProperties
|
|
||||||
|
|
||||||
LevelSession.find(query).select(projection).exec (err, documents) =>
|
getLevelSessions: (req, res, userIDOrSlug) ->
|
||||||
return @sendDatabaseError(res, err) if err
|
@IDify userIDOrSlug, (userID) =>
|
||||||
documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
|
query = creator: userID + ''
|
||||||
@sendSuccess(res, documents)
|
isAuthorized = req.user._id+'' is userID or req.user.isAdmin()
|
||||||
|
projection = {}
|
||||||
|
if req.query.project
|
||||||
|
projection[field] = 1 for field in req.query.project.split(',') when isAuthorized or not (field in LevelSessionHandler.privateProperties)
|
||||||
|
else unless isAuthorized
|
||||||
|
projection[field] = 0 for field in LevelSessionHandler.privateProperties
|
||||||
|
|
||||||
getEarnedAchievements: (req, res, userID) ->
|
LevelSession.find(query).select(projection).exec (err, documents) =>
|
||||||
queryObject = {$query: {user: userID}, $orderby: {changed: -1}}
|
return @sendDatabaseError(res, err) if err
|
||||||
queryObject.$query.notified = false if req.query.notified is 'false'
|
documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents)
|
||||||
query = EarnedAchievement.find(queryObject)
|
@sendSuccess(res, documents)
|
||||||
query.exec (err, documents) =>
|
|
||||||
return @sendDatabaseError(res, err) if err?
|
getEarnedAchievements: (req, res, userIDOrSlug) ->
|
||||||
cleandocs = (@formatEntity(req, doc) for doc in documents)
|
@IDify userIDOrSlug, (userID) =>
|
||||||
for doc in documents # Maybe move this logic elsewhere
|
query = user: userID + ''
|
||||||
doc.set('notified', true)
|
query.notified = false if req.query.notified is 'false'
|
||||||
doc.save()
|
EarnedAchievement.find(query).sort(changed: -1).exec (err, documents) =>
|
||||||
@sendSuccess(res, cleandocs)
|
return @sendDatabaseError(res, err) if err?
|
||||||
|
cleandocs = (@formatEntity(req, doc) for doc in documents)
|
||||||
|
for doc in documents # TODO Ruben Maybe move this logic elsewhere
|
||||||
|
doc.set('notified', true)
|
||||||
|
doc.save()
|
||||||
|
@sendSuccess(res, cleandocs)
|
||||||
|
|
||||||
trackActivity: (req, res, userID, activityName, increment=1) ->
|
trackActivity: (req, res, userID, activityName, increment=1) ->
|
||||||
return @sendMethodNotAllowed res unless req.method is 'POST'
|
return @sendMethodNotAllowed res unless req.method is 'POST'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue