use a mapping for handlers, schemas, and routes

This commit is contained in:
Sébastien Moratinos 2014-02-04 22:29:13 +01:00
parent 23a07303e3
commit baf5ada19d
11 changed files with 64 additions and 55 deletions

View file

@ -0,0 +1,41 @@
module.exports.handlers =
'article': 'articles/article_handler'
'campaign': 'campaigns/campaign_handler'
'campaign_status': 'campaigns/campaign_status_handler'
'file': 'files/file_handler'
'level': 'levels/level_handler'
'level_component': 'levels/components/level_component_handler'
'level_draft': 'levels/drafts/level_draft_handler'
'level_feedback': 'levels/feedbacks/level_feedback_handler'
'level_session': 'levels/sessions/level_session_handler'
'level_system': 'levels/systems/level_system_handler'
'thang_type': 'levels/thangs/thang_type_handler'
'user': 'users/user_handler'
module.exports.schemas =
'article': 'articles/article_schema'
'common': 'commons/schemas'
#'file': 'files/file_schema'
'i18n': 'commons/i18n_schema'
'level': 'levels/level_schema'
'level_component': 'levels/components/level_component_schema'
'level_feedback': 'levels/feedbacks/level_feedback_schema'
'level_session': 'levels/sessions/level_session_schema'
'level_system': 'levels/systems/level_system_schema'
'metaschema': 'commons/metaschema'
'thang_component': 'levels/thangs/thang_component_schema'
'thang_type': 'levels/thangs/thang_type_schema'
'user': 'users/user_schema'
module.exports.routes =
[
'routes/auth'
'routes/contact'
'routes/db'
'routes/file'
'routes/folder'
'routes/languages'
'routes/mail'
'routes/sprites'
]

View file

@ -7,7 +7,7 @@ config = require '../../server_config'
errors = require '../commons/errors'
mail = require '../commons/mail'
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
passport.serializeUser((user, done) -> done(null, user._id))
passport.deserializeUser((id, done) ->
User.findById(id, (err, user) -> done(err, user)))

View file

@ -0,0 +1,9 @@
winston = require 'winston'
routes = require('../commons/mapping').routes
module.exports.setup = (app) ->
for route in routes
do (route) ->
module = require('../'+route)
module.setup app
winston.info "route module #{route} setup"

View file

@ -2,7 +2,7 @@ config = require '../../server_config'
winston = require 'winston'
mail = require '../commons/mail'
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.post '/contact', (req, res) ->
winston.info "Sending mail from #{req.body.email} saying #{req.body.message}"
if config.isProduction

View file

@ -1,36 +1,9 @@
winston = require 'winston'
errors = require '../commons/errors'
handlers = require('../commons/mapping').handlers
schemas = require('../commons/mapping').schemas
handlers =
'article': '../../server/articles/article_handler'
'campaign': '../../server/campaigns/campaign_handler'
'campaign_status': '../../server/campaigns/campaign_status_handler'
'file': '../../server/files/file_handler'
'level': '../../server/levels/level_handler'
'level_component': '../../server/levels/components/level_component_handler'
'level_draft': '../../server/levels/drafts/level_draft_handler'
'level_feedback': '../../server/levels/feedbacks/level_feedback_handler'
'level_session': '../../server/levels/sessions/level_session_handler'
'level_system': '../../server/levels/systems/level_system_handler'
'thang_type': '../../server/levels/thangs/thang_type_handler'
'user': '../../server/users/user_handler'
schemas =
'article': '../../server/articles/article_schema'
'common': '../../server/commons/schemas'
#'file': '../../server/files/file_schema'
'i18n': '../../server/commons/i18n_schema'
'level': '../../server/levels/level_schema'
'level_component': '../../server/levels/components/level_component_schema'
'level_feedback': '../../server/levels/feedbacks/level_feedback_schema'
'level_session': '../../server/levels/sessions/level_session_schema'
'level_system': '../../server/levels/systems/level_system_schema'
'metaschema': '../../server/commons/metaschema'
'thang_component': '../../server/levels/thangs/thang_component_schema'
'thang_type': '../../server/levels/thangs/thang_type_schema'
'user': '../../server/users/user_schema'
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.all '/db/*', (req, res) ->
res.setHeader('Content-Type', 'application/json')
module = req.path[4..]
@ -42,7 +15,7 @@ module.exports.setupRoutes = (app) ->
try
moduleName = module.replace '.', '_'
name = handlers[moduleName]
module = require(name)
module = require('../' + name)
return module.getLatestVersion(req, res, parts[1], parts[3]) if parts[2] is 'version'
return module.versions(req, res, parts[1]) if parts[2] is 'versions'
return module.files(req, res, parts[1]) if parts[2] is 'files'
@ -59,7 +32,7 @@ module.exports.setupRoutes = (app) ->
getSchema = (req, res, moduleName) ->
try
name = schemas[moduleName.replace '.', '_']
schema = require(name)
schema = require('../' + name)
res.send(schema)
res.end()

View file

@ -5,7 +5,7 @@ request = require 'request'
mongoose = require('mongoose')
errors = require '../commons/errors'
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.all '/file*', (req, res) ->
return fileGet(req, res) if req.route.method is 'get'
return filePost(req, res) if req.route.method is 'post'

View file

@ -1,7 +1,7 @@
mongoose = require('mongoose')
errors = require '../commons/errors'
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.all '/folder*', (req, res) ->
return folderGet(req, res) if req.route.method is 'get'
return errors.badMethod(res)

View file

@ -2,7 +2,7 @@ errors = require '../commons/errors'
winston = require 'winston'
locale = require '../../app/locale/locale' # requiring from app; will break if we stop serving from where app lives
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.all '/languages/add/:lang/:namespace', (req, res) ->
# Should probably store these somewhere
winston.info "#{req.params.lang}.#{req.params.namespace} missing an i18n key:", req.body

View file

@ -9,7 +9,7 @@ config = require '../../server_config'
# console.log text
# request.post 'http://requestb.in/1brdpaz1', { form: {log: text} }
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.all config.mail.mailchimpWebhook, (req, res) ->
post = req.body
# badLog("Got post data: #{JSON.stringify(post, null, '\t')}")

View file

@ -2,7 +2,7 @@
# order the sprites and make the more recent ones
# show up at the top
module.exports.setupRoutes = (app) ->
module.exports.setup = (app) ->
app.get('/server/sprite-info', (req, res) ->
exec = require('child_process').exec

View file

@ -5,16 +5,9 @@ useragent = require 'express-useragent'
fs = require 'graceful-fs'
database = require './server/commons/database'
auth = require './server/routes/auth'
db = require './server/routes/db'
file = require './server/routes/file'
folder = require './server/routes/folder'
baseRoute = require './server/routes/base'
user = require './server/users/user_handler'
logging = require './server/commons/logging'
sprites = require './server/routes/sprites'
contact = require './server/routes/contact'
languages = require './server/routes/languages'
mail = require './server/routes/mail'
config = require './server_config'
@ -87,14 +80,7 @@ setupFacebookCrossDomainCommunicationRoute = (app) ->
exports.setupRoutes = (app) ->
app.use app.router
auth.setupRoutes app
db.setupRoutes app
sprites.setupRoutes app
contact.setupRoutes app
file.setupRoutes app
folder.setupRoutes app
languages.setupRoutes app
mail.setupRoutes app
baseRoute.setup app
setupFacebookCrossDomainCommunicationRoute app
setupFallbackRouteToIndex app