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() or req.user?.isArtisan() hasAccessToDocument: (req, document, method=null) -> method = (method or req.method).toLowerCase() return true if method is 'get' return true if req.user?.isAdmin() or req.user?.isArtisan() 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() or req.user?.isArtisan() @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 getNamesByIDs: (req, res) -> @getNamesByOriginals req, res, true module.exports = new AchievementHandler()