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;