diff --git a/server/achievements/EarnedAchievement.coffee b/server/achievements/EarnedAchievement.coffee index 685a502c6..088a919b3 100644 --- a/server/achievements/EarnedAchievement.coffee +++ b/server/achievements/EarnedAchievement.coffee @@ -20,4 +20,10 @@ EarnedAchievementSchema.pre 'save', (next) -> EarnedAchievementSchema.index({user: 1, achievement: 1}, {unique: true, name: 'earned achievement index'}) EarnedAchievementSchema.index({user: 1, changed: -1}, {name: 'latest '}) +EarnedAchievementSchema.static 'recalculate', (callback) -> + callback('pass') + module.exports = EarnedAchievement = mongoose.model('EarnedAchievement', EarnedAchievementSchema) + + + diff --git a/server/achievements/earned_achievement_handler.coffee b/server/achievements/earned_achievement_handler.coffee index ebab1e45d..8869f5c6d 100644 --- a/server/achievements/earned_achievement_handler.coffee +++ b/server/achievements/earned_achievement_handler.coffee @@ -1,3 +1,4 @@ +log = require 'winston' mongoose = require('mongoose') EarnedAchievement = require './EarnedAchievement' Handler = require '../commons/Handler' @@ -9,4 +10,7 @@ class EarnedAchievementHandler extends Handler hasAccess: (req) -> req.method is 'GET' + recalculate: (req, res) -> + EarnedAchievement.recalculate (data) => @sendSuccess(res, data) + module.exports = new EarnedAchievementHandler() diff --git a/server/commons/mapping.coffee b/server/commons/mapping.coffee index 98efbad6a..4b859632c 100644 --- a/server/commons/mapping.coffee +++ b/server/commons/mapping.coffee @@ -14,6 +14,7 @@ module.exports.handlers = module.exports.routes = [ + 'routes/admin' 'routes/auth' 'routes/contact' 'routes/db' diff --git a/server/routes/admin.coffee b/server/routes/admin.coffee new file mode 100644 index 000000000..012f0d865 --- /dev/null +++ b/server/routes/admin.coffee @@ -0,0 +1,24 @@ +log = require 'winston' +errors = require '../commons/errors' +handlers = require('../commons/mapping').handlers + +module.exports.setup = (app) -> + app.all '/admin/*', (req, res) -> + res.setHeader('Content-Type', 'application/json') + + module = req.path[7..] + parts = module.split('/') + module = parts[0] + + return errors.unauthorized(res, 'Must be admin to access this area.') unless req.user?.isAdmin() + + try + moduleName = module.replace '.', '_' + name = handlers[moduleName] + handler = require('../' + name) + + return handler[parts[1]](req, res, parts[2..]...) if parts[1] of handler + + catch error + log.error("Error trying db method '#{req.route.method}' route '#{parts}' from #{name}: #{error}") + errors.notFound(res, "Route #{req.path} not found.")