UNPKG

maniajs

Version:

ManiaPlanet (Dedicated) Server Controller.

143 lines (110 loc) 4.15 kB
/** * Database Client. Connects to the underlying managers. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _path = require('path'); var path = _interopRequireWildcard(_path); var _glob = require('glob'); var glob = _interopRequireWildcard(_glob); var _configuration = require('./../util/configuration'); var _sequelize = require('sequelize'); var _sequelize2 = _interopRequireDefault(_sequelize); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Database Client Class. * @class DatabaseClass * @type {DatabaseClass} */ var DatabaseClient = function () { function DatabaseClient(app, config) { _classCallCheck(this, DatabaseClient); // Init props this.sequelize = null; this.app = app; // Prepare config for constructing sequelize... var options = { pool: config.pool }; if (config.dialect === 'mysql' || config.dialect === 'mariadb' || config.dialect === 'mssql' || config.dialect === 'postres') { Object.assign(options, { host: config[config.dialect].host, port: config[config.dialect].port, dialect: config.dialect }); } if (config.dialect === 'sqlite') { Object.assign(options, { dialect: 'sqlite', storage: config.sqlite.storage.startsWith('./') ? path.normalize(_configuration.location + '/' + config.sqlite.storage) : path.resolve(config.sqlite.storage) }); } if (app.config.db.debug) { Object.assign(options, { logging: function logging(input) { app.log.debug(input); } }); } else { Object.assign(options, { logging: false }); } this.options = options; this.database = config.database; this.username = config.authentication.username; this.password = config.authentication.password; } /** * Connect to database. * * @returns {Promise} */ _createClass(DatabaseClient, [{ key: 'connect', value: function connect() { var self = this; return new Promise(function (resolve, reject) { try { self.sequelize = new _sequelize2.default(self.database, self.username, self.password, self.options); } catch (err) { return reject(err); } return resolve(); }); } /** * Sync models with database structure. * @returns {Promise} */ }, { key: 'sync', value: function sync() { return this.sequelize.sync({ force: false }); } /** * Load all core models. */ }, { key: 'loadCoreModels', value: function loadCoreModels() { var _this = this; var list = glob.sync(path.normalize(__dirname + '/../models/') + '*.js'); if (list.length > 0) { list.forEach(function (file) { // Import sequelize model. var model = _this.sequelize.import(file); // Save to model storage of app. _this.app.models[model.name] = model; }); } } }]); return DatabaseClient; }(); exports.default = DatabaseClient;