server.coffee
author Tomas Zeman <tzeman@volny.cz>
Sun, 15 Dec 2013 17:14:26 +0100
changeset 5 ed2abdd11a1b
parent 4 cbba85b1f677
permissions -rw-r--r--
Added 'npm start' method

Q = require 'q'
Http = require 'q-io/http'
Apps = require 'q-io/http-apps'
bunyan = require 'bunyan'

log = bunyan.createLogger {
  name: 'asa-test-server'
  level: 'debug'
}

noContent =
  status: 204
  headers: {}

route = Apps.Branch {
  ###
  'ok': (rq,rs) => {
    status: 200
    headers: {}
    data:
      result: 'ok'
      request:
        path: rq.path
        pathInfo: rq.pathInfo
      response: rs
  }
  'post': Apps.Method {
    'POST': Apps.JsonRequest((o, rq, rs) => {
      status: 200
      headers: {}
      data:
        data: o
        request:
          path: rq.path
          pathInfo: rq.pathInfo
        response: rs
    })
  }, Apps.methodNotAllowed
  ###
 
  'login': Apps.Method {
    'POST': Apps.JsonRequest((o, rq, rs) =>
      log.info("Login", o)
      {
        status: 200
        headers: {}
        data:
          configId: 'cfg1'
          sessionId: 'sess1'
      })
  }, Apps.methodNotAllowed

  'orders': (rq, rs) => {
    status: 200
    headers: {}
    data:
      orders: [{
          orderId: 123
          name: 'Order 1'
          description: 'Description of order 1'
        }, {
          orderId: 554
          name: 'Order 2'
          description: 'Description of order 2'
        }]
  }

  'event': Apps.Method {
    'POST': Apps.JsonRequest((o, rq, rs) =>
      log.info("Event", o)
      noContent
    )
  }, Apps.methodNotAllowed

  'ping': Apps.Method {
    'POST': Apps.JsonRequest((o, rq, rs) =>
      log.info("Ping", o)
      noContent
    )
  }, Apps.methodNotAllowed

  'log': Apps.Method {
    'POST': Apps.JsonRequest((o, rq, rs) =>
      log.info("Ping", o)
      noContent
    )
    'GET': (rq, rs) => {
      status: 200
      headers: {}
      data:
        lastLog: new Date().toISOString()
    }
  }, Apps.methodNotAllowed
}

app = Apps.Chain()
  .use(() => Apps.Log(Apps.HandleJsonResponses(route, null, "  "),
    (m) => log.info("Access: " + m)))
  .end()

Http.Server(app).listen(3000)

# vim: et ts=2 sw=2