mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-11 00:02:19 -05:00
60 lines
1.7 KiB
CoffeeScript
60 lines
1.7 KiB
CoffeeScript
Achievement = require './Achievement'
|
|
Handler = require '../commons/Handler'
|
|
|
|
class AchievementHandler extends Handler
|
|
modelClass: Achievement
|
|
|
|
# Used to determine which properties requests may edit
|
|
editableProperties: [
|
|
'name'
|
|
'query'
|
|
'worth'
|
|
'collection'
|
|
'description'
|
|
'userField'
|
|
'proportionalTo'
|
|
'icon'
|
|
'function'
|
|
'related'
|
|
'difficulty'
|
|
'category'
|
|
'rewards'
|
|
'i18n'
|
|
'i18nCoverage'
|
|
]
|
|
|
|
allowedMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']
|
|
jsonSchema = require '../../app/schemas/models/achievement.coffee'
|
|
|
|
|
|
hasAccess: (req) ->
|
|
req.method in ['GET', 'PUT'] or req.user?.isAdmin()
|
|
|
|
hasAccessToDocument: (req, document, method=null) ->
|
|
method = (method or req.method).toLowerCase()
|
|
return true if method is 'get'
|
|
return true if req.user?.isAdmin()
|
|
return true if method is 'put' and @isJustFillingTranslations(req, document)
|
|
return
|
|
|
|
get: (req, res) ->
|
|
# /db/achievement?related=<ID>
|
|
if req.query.related
|
|
return @sendForbiddenError(res) if not @hasAccess(req)
|
|
Achievement.find {related: req.query.related}, (err, docs) =>
|
|
return @sendDatabaseError(res, err) if err
|
|
docs = (@formatEntity(req, doc) for doc in docs)
|
|
@sendSuccess res, docs
|
|
else
|
|
super req, res
|
|
|
|
delete: (req, res, slugOrID) ->
|
|
return @sendForbiddenError res unless req.user?.isAdmin()
|
|
@getDocumentForIdOrSlug slugOrID, (err, document) => # Check first
|
|
return @sendDatabaseError(res, err) if err
|
|
return @sendNotFoundError(res) unless document?
|
|
document.remove (err, document) =>
|
|
return @sendDatabaseError(res, err) if err
|
|
@sendNoContent res
|
|
|
|
module.exports = new AchievementHandler()
|