FredericHeem/starhackit

View on GitHub
server/src/app.js

Summary

Maintainability
A
1 hr
Test Coverage
const Promise = require("bluebird");
const config = require("config");
const Plugins = require("./plugins");
const Data = require("./models/Data");
const Store = require("./store/Store");
const Server = require("./server/koa/koaServer");
const HttpUtils = require("./utils/HttpUtils");
const log = require("logfilename")(__filename, config.log);
function App() {
  let data = Data(config);
  const publisher = Store(config);

  let app = {
    config,
    data: data,
    publisher,
    utils: {
      http: HttpUtils,
      api: require("./utils/ApiUtils"),
    },
    async start() {
      log.debug("start");
      await action("start");
      log.info("started");
    },

    async stop() {
      log.debug("stop");
      await action("stop");
      log.info("stopped");
    },
    displayInfoEnv: displayInfoEnv,
  };

  app.server = Server(app);
  app.plugins = Plugins(app);
  //Must be called when all plugins are created.
  app.server.mountRootRouter();
  app.server.displayRoutes();

  let parts = [app.data, app.server, app.plugins];

  async function action(ops) {
    await Promise.each(parts, (part) => part[ops](app));
  }

  return app;
}

function displayInfoEnv() {
  log.info("NODE_ENV: %s", process.env.NODE_ENV);
  if (process.env.NODE_CONFIG) {
    log.info("NODE_CONFIG is set");
  }
  log.info("USER: %s", process.env.USER);
  log.info("PWD: %s", process.env.PWD);
}

module.exports = App;