maniajs
Version:
ManiaPlanet (Dedicated) Server Controller.
143 lines (110 loc) • 4.15 kB
JavaScript
/**
* Database Client. Connects to the underlying managers.
*/
;
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;