v1/Server/Roleypoly.js
2019-11-19 23:03:04 -05:00

57 lines
1.5 KiB
JavaScript

const log = new (require('./logger'))('Roleypoly');
const Sequelize = require('sequelize');
const fetchModels = require('./models');
const fetchApis = require('./api');
class Roleypoly {
constructor(router, io, app) {
this.router = router;
this.io = io;
this.ctx = {};
this.ctx.config = {
appUrl: process.env.APP_URL,
};
this.ctx.io = io;
this.__app = app;
if (log.debugOn) log.warn('debug mode is on');
this.__initialized = this._mountServices();
}
async awaitServices() {
await this.__initialized;
}
async _mountServices() {
const sequelize = new Sequelize(process.env.DB_URL, {
logging: log.sql.bind(log, log),
});
this.ctx.sql = sequelize;
this.M = fetchModels(sequelize);
this.ctx.M = this.M;
await sequelize.sync();
// this.ctx.redis = new (require('ioredis'))({
// port: process.env.REDIS_PORT || '6379',
// host: process.env.REDIS_HOST || 'localhost',
// parser: 'hiredis',
// dropBufferSupport: true,
// enableReadyCheck: true,
// enableOfflineQueue: true
// })
this.ctx.server = new (require('./services/server'))(this.ctx);
this.ctx.discord = new (require('./services/discord'))(this.ctx);
this.ctx.sessions = new (require('./services/sessions'))(this.ctx);
this.ctx.P = new (require('./services/presentation'))(this.ctx);
}
async mountRoutes() {
fetchApis(this.router, this.ctx);
this.__app.use(this.router.middleware());
}
}
module.exports = Roleypoly;