acha-framework
Version:
is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...
90 lines • 2.84 kB
JavaScript
(function (undefined) {
Ioc.define('backend.orm', [
'backend.configuration',
'backend.logHelper',
'backend.models.user'
], function (provide, config, logger, User) {
const caminte = require('caminte');
const Schema = caminte.Schema;
const AchaOrm = function () {
this.schemas = [];
this.models = {};
this.provider();
};
AchaOrm.prototype.provider = function () {
switch (config.adapter) {
case 'mysql':
this.database = this.MySQl();
break;
case 'mongodb':
this.database = this.MongoDB();
break;
default:
this.database = this.SQLite();
break;
}
};
AchaOrm.prototype.MySQl = function () {
var db_config = {
driver: 'mysql',
host: config.database.connection || 'localhost',
port: config.database.port || '3306',
username: config.database.username || '',
password: config.database.password || '',
database: config.database.database || 'acha_application',
pool: true
};
return new Schema(db_config.driver, db_config);
};
AchaOrm.prototype.MongoDB = function () {
var db_config = {
driver: 'mongodb',
host: config.database.connection || 'localhost',
port: config.database.port || '27017',
username: config.database.username || '',
password: config.database.password || '',
database: config.database.database || 'acha_application',
pool: true
};
return new Schema(db_config.driver, db_config);
};
AchaOrm.prototype.SQLite = function () {
var db_path = PATH.resolve(config.rootDirectory, 'database');
var db_file = PATH.resolve(db_path, config.database.connection || 'acha_application.database');
var db_config = {
driver: 'sqlite3',
database: db_file,
autoReconnect: true
};
FSX.mkdirsSync(db_path);
return new Schema(db_config.driver, db_config);
};
AchaOrm.prototype.define = function (schema) {
this.schemas.push(schema);
};
AchaOrm.prototype.init = function () {
return Q.Promise(function (resolve, reject) {
resolve();
});
};
AchaOrm.prototype.migrate = function () {
const self = this;
return Q.Promise(function (resolve, reject) {
self.schemas.unshift(User(self));
self.schemas.forEach(function (item) {
self.models[item.name] = self.database.define(item.name, item.definitions);
item.patch(self.models[item.name]);
});
self.database.autoupdate(function (err) {
if (err) {
logger.log(err);
reject(err);
return;
}
resolve();
});
});
};
provide(new AchaOrm());
});
}());