@actonate/mirkwood
Version:
GraphQL based Rapid Server-side Development framework
148 lines (111 loc) • 4.66 kB
JavaScript
;
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 _adapters = require('./adapters');
var _adapters2 = _interopRequireDefault(_adapters);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _types = require('../../lib/types');
var _types2 = _interopRequireDefault(_types);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var DEFAULT_CONNECTION = 'development';
var DEFAULT_ADAPTER = 'postgresql';
var Database = function () {
function Database() {
_classCallCheck(this, Database);
}
_createClass(Database, null, [{
key: 'init',
value: function init(_ref) {
var config = _ref.config;
this.config = config;
this.connections = {};
}
}, {
key: 'generateFindType',
value: function generateFindType(model) {
var schema = model.schema;
var modelName = schema.name;
var findTypeName = [modelName, 'Find'].join('_');
// fetch if exists
if (_types2.default.get(findTypeName)) {
return _types2.default.get(findTypeName);
}
return _types2.default.generateInputType({
name: findTypeName,
fields: schema.fields
}, ['defaultValue']); // sp that defaultValue is filtered out
}
}]);
return Database;
}();
Database.getConnection = function (name) {
var connectionName = name || process.env['NODE_ENV'] || 'development';
var dbConnectionParams = Database.config[connectionName];
var dbAdapter = _adapters2.default[dbConnectionParams.adapter || DEFAULT_ADAPTER];
// check if connection exists
if (Database.connections[connectionName]) {
return Database.connections[connectionName];
}
var newConnection = new dbAdapter(dbConnectionParams);
Database.connections[connectionName] = newConnection;
return newConnection;
};
Database.all = function (datasource, args) {
var dbConnection = Database.getConnection(datasource.connection);
return dbConnection.all(datasource, args);
};
Database.count = function (datasource, args) {
var dbConnection = Database.getConnection(datasource.connection);
return dbConnection.count(datasource, args);
};
Database.create = function (datasource, row, args) {
var dbConnection = Database.getConnection(datasource.connection);
row = Database.extend('create', row, datasource);
return dbConnection.create(datasource, row, args);
};
Database.createMany = function (datasource, rows, args) {
var dbConnection = Database.getConnection(datasource.connection);
rows = Database.extend('create', rows, datasource);
return dbConnection.createMany(datasource, rows, args);
};
Database.update = function (datasource, find, row, args) {
var dbConnection = Database.getConnection(datasource.connection);
row = Database.extend('update', row, datasource);
return dbConnection.update(datasource, find, row, args);
};
Database.destroy = function (datasource, find, args) {
var dbConnection = Database.getConnection(datasource.connection);
return dbConnection.destroy(datasource, find, args);
};
Database.delete = function (datasource, find, args) {
var dbConnection = Database.getConnection(datasource.connection);
return dbConnection.delete(datasource, find, args);
};
Database.one = function (datasource, args) {
var dbConnection = Database.getConnection(datasource.connection);
return dbConnection.one(datasource, args);
};
Database.extend = function (mode, row, datasource) {
if (Array.isArray(row)) {
var rows = row;
return rows.map(function (row) {
return Database.extend(mode, row, datasource);
});
}
// check timestamps options
if (datasource.timestamps) {
if (mode === 'create') {
row._created_at = row._created_at || _moment2.default.utc().format();
row._updated_at = row._updated_at || _moment2.default.utc().format();
}
if (mode === 'update') {
row._updated_at = row._updated_at || _moment2.default.utc().format();
}
}
return row;
};
exports.default = Database;