WIP open file for a while
This commit is contained in:
parent
f937019e42
commit
d280fb9af3
122 changed files with 5702 additions and 10 deletions
247
lib/backend/database.js
Normal file
247
lib/backend/database.js
Normal file
|
|
@ -0,0 +1,247 @@
|
|||
var tcrudSetup = require('./../tcrud-setup');
|
||||
var debug = require('debug')('ff:tcrud:backend:database');
|
||||
|
||||
module.exports = {
|
||||
loadModule: function(key,dbModule) {
|
||||
tcrudSetup.pluginLoad(new DatabasePlugin(key,dbModule));
|
||||
},
|
||||
loadPostgres: function(key,dbUri,pgDB,pgDBNamed) {
|
||||
tcrudSetup.pluginLoad(new DatabasePlugin(key,new PostgresModule(dbUri,pgDB,pgDBNamed)));
|
||||
},
|
||||
loadMysql2: function(key,pool) {
|
||||
tcrudSetup.pluginLoad(new DatabasePlugin(key,new Mysql2Module(pool)));
|
||||
},
|
||||
loadMssql: function(key,driver,conn) {
|
||||
tcrudSetup.pluginLoad(new DatabasePlugin(key,new MssqlModule(driver,conn)));
|
||||
}
|
||||
}
|
||||
|
||||
//------- PostgresModule Object
|
||||
|
||||
function PostgresModule(dbUri,pgDB,pgDBNamed) {
|
||||
this.dbUri = dbUri;
|
||||
this.pgDB = pgDB;
|
||||
this.pgDBNamed = pgDBNamed;
|
||||
}
|
||||
PostgresModule.prototype.query = function(sqlQuery,params, cb) {
|
||||
var self = this;
|
||||
self.pgDB.connect(self.dbUri, function(err, client, done) {
|
||||
self.pgDBNamed.patch(client);
|
||||
client.query(sqlQuery, params, function(err, result) {
|
||||
done(); // release client from pool
|
||||
cb(err,result);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function Mysql2Module(pool) {
|
||||
this.pool = pool;
|
||||
}
|
||||
Mysql2Module.prototype.query = function(sqlQuery,params, cb) {
|
||||
var self = this;
|
||||
self.pool.getConnection(function(err, connection) {
|
||||
connection.config.namedPlaceholders = true;
|
||||
connection.execute(sqlQuery,params, function(err, rows) {
|
||||
connection.release();
|
||||
cb(err,rows);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function MssqlModule(driver,conn) {
|
||||
this.driver = driver;
|
||||
this.conn = conn;
|
||||
}
|
||||
MssqlModule.prototype.query = function(sqlQuery,params, cb) {
|
||||
var self = this;
|
||||
var request = new self.driver.Request(self.conn);
|
||||
request.query(sqlQuery,params,function(err, rows) {
|
||||
cb(err,rows);
|
||||
});
|
||||
}
|
||||
|
||||
//------- DatabasePlugin Object
|
||||
|
||||
function DatabasePlugin(key,dbModule) {
|
||||
this.key = key;
|
||||
this.dbModule = dbModule;
|
||||
}
|
||||
|
||||
DatabasePlugin.prototype.configPlugin = function (ctx) {
|
||||
ctx.key='db#'+this.key;
|
||||
ctx.description='Database api adapter for '+this.key;
|
||||
};
|
||||
|
||||
DatabasePlugin.prototype.createBackend = function() {
|
||||
return new DatabaseBackend(this);
|
||||
}
|
||||
|
||||
DatabasePlugin.prototype.query = function(sqlQuery,params, cb) {
|
||||
this.dbModule.query(sqlQuery,params,cb);
|
||||
}
|
||||
|
||||
// -------- DatabaseBackend
|
||||
|
||||
function findKeysView(tview) {
|
||||
return tview.tkeys;
|
||||
}
|
||||
|
||||
function findKeysModel(tview) {
|
||||
return tview.tmeta.tmodel.tkeys;
|
||||
}
|
||||
|
||||
function selectField(tview,crudType) {
|
||||
var result = [];
|
||||
tview[crudType].tfields.forEach(function (tfieldKey) {
|
||||
var tfield = tview.tmeta.tfields[tfieldKey];
|
||||
result.push(tfield.tid);
|
||||
});
|
||||
var resultSql = '';
|
||||
for (var i = 0; i < result.length; i++) {
|
||||
var key = result[i];
|
||||
resultSql += key;
|
||||
if (i < (result.length - 1)) {
|
||||
resultSql += ',';
|
||||
}
|
||||
}
|
||||
return resultSql;
|
||||
}
|
||||
|
||||
function whereKeys(tview) {
|
||||
var resultSql = '';
|
||||
for (var i = 0; i < tview.tmeta.tmodel.tkeys.length; i++) {
|
||||
var key = tview.tmeta.tmodel.tkeys[i];
|
||||
//resultSql += key +' = $'+(i+1);
|
||||
resultSql += key +' = $'+key;
|
||||
if (i < (tview.tmeta.tmodel.tkeys.length - 1)) {
|
||||
resultSlug += ' AND ';
|
||||
}
|
||||
}
|
||||
return resultSql;
|
||||
}
|
||||
|
||||
function updateValues(tview,data) {
|
||||
var resultSql = 'SET ';
|
||||
var dataKeys = Object.keys(data);
|
||||
for (var i = 0; i < dataKeys.length; i++) {
|
||||
var key = dataKeys[i];
|
||||
|
||||
var skip = false;
|
||||
for (var ii = 0; ii < tview.tmeta.tmodel.tkeys.length; ii++) {
|
||||
var keyPK = tview.tmeta.tmodel.tkeys[ii];
|
||||
if (key === keyPK) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (skip === true) {
|
||||
continue;
|
||||
}
|
||||
resultSql += key +' = $'+key;
|
||||
if (i < (dataKeys.length - 1)) {
|
||||
resultSql += ',';
|
||||
}
|
||||
}
|
||||
return resultSql;
|
||||
}
|
||||
|
||||
function DatabaseBackend(plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.getKey = function() {
|
||||
return this.plugin.key;
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.findAll = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+'';
|
||||
debug('findAll %s',querySql);
|
||||
var query = self.plugin.query(querySql,[],function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.createNew = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.findOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview)+'';
|
||||
debug('findOne param %s',JSON.stringify(dataParam));
|
||||
debug('findOne sql %s',querySql);
|
||||
var query = self.plugin.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.updateOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'UPDATE '+tview.tmeta.tmodel.tid+' '+updateValues(tview,data)+' WHERE '+whereKeys(tview);
|
||||
debug('updateOne param %s',JSON.stringify(dataParam));
|
||||
debug('updateOne data %s',JSON.stringify(data));
|
||||
debug('updateOne sql %s',querySql);
|
||||
var query = self.plugin.query(querySql, data, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.deleteOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'DELETE FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
debug('deleteOne param %s',JSON.stringify(dataParam));
|
||||
debug('deleteOne sql %s',querySql);
|
||||
var query = self.plugin.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
DatabaseBackend.prototype.findAllCount = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT count(*) FROM '+tview.tmeta.tmodel.tid; //+' WHERE '+whereKeys(tview);
|
||||
debug('findAllCount param %s',JSON.stringify(dataParam));
|
||||
debug('findAllCount sql %s',querySql);
|
||||
var query = self.plugin.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
150
lib/backend/ldapjs.js
Normal file
150
lib/backend/ldapjs.js
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
var config = require('./../tcrud-config');
|
||||
var debug = require('debug')('ff:tcrud:ldapjs');
|
||||
|
||||
module.exports = {
|
||||
registrate: function(key,client) {
|
||||
config.registratePlugin(new LdapJSPlugin(key,client));
|
||||
}
|
||||
}
|
||||
|
||||
// ------- LdapJSPlugin Object
|
||||
|
||||
function LdapJSPlugin(key,client) {
|
||||
this.key = key;
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
LdapJSPlugin.prototype.configPlugin = function (ctx) {
|
||||
ctx.key='ldapjs#'+this.key;
|
||||
ctx.description='Adds ldap backend support.';
|
||||
};
|
||||
|
||||
LdapJSPlugin.prototype.createBackend = function() {
|
||||
return new LdapJSBackend(this);
|
||||
}
|
||||
|
||||
// -------- LdapJSBackend Object
|
||||
|
||||
function LdapJSBackend(plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.getKey = function() {
|
||||
return this.plugin.key;
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.findAll = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var opts = {
|
||||
filter: '(&(l=Seattle)(email=*@foo.com))',
|
||||
scope: 'sub'
|
||||
};
|
||||
debug('findAll %s',opts);
|
||||
self.plugin.client.search('o=example', opts, function(err, res) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
return;
|
||||
}
|
||||
//var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+'';
|
||||
var result = [];
|
||||
res.on('searchEntry', function(entry) {
|
||||
result.push(entry);
|
||||
});
|
||||
res.on('end', function(result) {
|
||||
cb(err,result);
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.createNew = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var entry = {
|
||||
cn: 'foo',
|
||||
sn: 'bar',
|
||||
email: ['foo@bar.com', 'foo1@bar.com'],
|
||||
objectclass: 'fooPerson'
|
||||
};
|
||||
self.plugin.client.add('cn=foo, o=example', entry, function(err) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.findOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview)+'';
|
||||
debug('findOne param %s',JSON.stringify(dataParam));
|
||||
debug('findOne sql %s',querySql);
|
||||
var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.updateOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'UPDATE '+tview.tmeta.tmodel.tid+' '+updateValues(tview,data)+' WHERE '+whereKeys(tview);
|
||||
debug('updateOne param %s',JSON.stringify(dataParam));
|
||||
debug('updateOne data %s',JSON.stringify(data));
|
||||
debug('updateOne sql %s',querySql);
|
||||
var query = self.db.query(querySql, data, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.deleteOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'DELETE FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
debug('deleteOne param %s',JSON.stringify(dataParam));
|
||||
debug('deleteOne sql %s',querySql);
|
||||
var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
LdapJSBackend.prototype.findAllCount = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT count(*) FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
debug('findAllCount param %s',JSON.stringify(dataParam));
|
||||
debug('findAllCount sql %s',querySql);
|
||||
var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
127
lib/backend/mongo.js
Normal file
127
lib/backend/mongo.js
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
var config = require('./../tcrud-config');
|
||||
var debug = require('debug')('ff:tcrud:mongo');
|
||||
|
||||
module.exports = {
|
||||
registrate: function(key,server) {
|
||||
config.registratePlugin(new MongoPlugin(key,server));
|
||||
}
|
||||
}
|
||||
|
||||
// ------- MongoPlugin Object
|
||||
|
||||
function MongoPlugin(key,server) {
|
||||
this.key = key;
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
MongoPlugin.prototype.configPlugin = function (ctx) {
|
||||
ctx.key='mongo#'+this.key;
|
||||
ctx.description='Adds mongo backend support.';
|
||||
};
|
||||
|
||||
MongoPlugin.prototype.createBackend = function() {
|
||||
return new MongoBackend(this);
|
||||
}
|
||||
|
||||
// -------- MongoBackend
|
||||
|
||||
function MongoBackend(plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
MongoBackend.prototype.getKey = function() {
|
||||
return this.plugin.key;
|
||||
}
|
||||
|
||||
MongoBackend.prototype.findAll = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+'';
|
||||
debug('findAll %s',querySql);
|
||||
var query = self.db.query(querySql,[],function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
MongoBackend.prototype.createNew = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
MongoBackend.prototype.findOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview)+'';
|
||||
debug('findOne param %s',JSON.stringify(dataParam));
|
||||
debug('findOne sql %s',querySql);
|
||||
var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
MongoBackend.prototype.updateOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'UPDATE '+tview.tmeta.tmodel.tid+' '+updateValues(tview,data)+' WHERE '+whereKeys(tview);
|
||||
debug('updateOne param %s',JSON.stringify(dataParam));
|
||||
debug('updateOne data %s',JSON.stringify(data));
|
||||
debug('updateOne sql %s',querySql);
|
||||
var query = self.db.query(querySql, data, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
MongoBackend.prototype.deleteOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'DELETE FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
debug('deleteOne param %s',JSON.stringify(dataParam));
|
||||
debug('deleteOne sql %s',querySql);
|
||||
var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
MongoBackend.prototype.findAllCount = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
var querySql = 'SELECT count(*) FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
debug('findAllCount param %s',JSON.stringify(dataParam));
|
||||
debug('findAllCount sql %s',querySql);
|
||||
var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows[0]);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
271
lib/backend/mongoose.js
Normal file
271
lib/backend/mongoose.js
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
var config = require('./../tcrud-config');
|
||||
var debug = require('debug')('ff:tcrud:mongoose');
|
||||
var clone = require('clone');
|
||||
var validate = require('validate.io');
|
||||
|
||||
// ------- MongoosePlugin Object
|
||||
|
||||
function MongoosePlugin(key,conn) {
|
||||
this.key = key;
|
||||
this.conn = conn;
|
||||
}
|
||||
|
||||
MongoosePlugin.prototype.configPlugin = function (ctx) {
|
||||
ctx.key='mongoose#'+this.key;
|
||||
ctx.description='Adds ldap backend support.';
|
||||
};
|
||||
|
||||
MongoosePlugin.prototype.createBackend = function() {
|
||||
return new MongooseBackend(this);
|
||||
}
|
||||
|
||||
//------- MongooseBackend Object
|
||||
|
||||
function MongooseBackend(plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.getKey = function() {
|
||||
return this.plugin.key;
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.findAll = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
debug('find all..'+tview.tmeta.tmodel.tid);
|
||||
var model = self.plugin.conn.model(tview.tmeta.tmodel.tid);
|
||||
model.find({},function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows);
|
||||
}
|
||||
});
|
||||
// cb();
|
||||
// var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+'';
|
||||
// debug('findAll %s',querySql);
|
||||
// var query = self.db.query(querySql,[],
|
||||
};
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.createNew = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.findOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
debug('findOne param %s',JSON.stringify(dataParam));
|
||||
//debug('findOne sql %s',querySql);
|
||||
var model = self.plugin.conn.model(tview.tmeta.tmodel.tid);
|
||||
model.findById(dataParam,function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows);
|
||||
}
|
||||
});
|
||||
|
||||
// var querySql = 'SELECT '+selectField(tview,crudType)+' FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview)+'';
|
||||
//
|
||||
};
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.updateOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
debug('updateOne param %s',JSON.stringify(dataParam));
|
||||
debug('updateOne data %s',JSON.stringify(data));
|
||||
var model = self.plugin.conn.model(tview.tmeta.tmodel.tid);
|
||||
model.save(data,function (err, result) {
|
||||
if (err) {
|
||||
debug(err);
|
||||
cb(err);
|
||||
} else {
|
||||
cb(err,result.rows);
|
||||
}
|
||||
});
|
||||
|
||||
// var querySql = 'UPDATE '+tview.tmeta.tmodel.tid+' '+updateValues(tview,data)+' WHERE '+whereKeys(tview);
|
||||
//
|
||||
// debug('updateOne sql %s',querySql);
|
||||
// var query = self.db.query(querySql, data, function (err, result) {
|
||||
// if (err) {
|
||||
// debug(err);
|
||||
// cb(err);
|
||||
// } else {
|
||||
// cb(err,result.rows[0]);
|
||||
// }
|
||||
// });
|
||||
};
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.deleteOne = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
// var querySql = 'DELETE FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
// debug('deleteOne param %s',JSON.stringify(dataParam));
|
||||
// debug('deleteOne sql %s',querySql);
|
||||
// var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
// if (err) {
|
||||
// debug(err);
|
||||
// cb(err);
|
||||
// } else {
|
||||
// cb(err,result.rows[0]);
|
||||
// }
|
||||
// });
|
||||
};
|
||||
}
|
||||
|
||||
MongooseBackend.prototype.findAllCount = function(tview,crudType) {
|
||||
var self = this;
|
||||
return function(data, dataParam, cb) {
|
||||
// var querySql = 'SELECT count(*) FROM '+tview.tmeta.tmodel.tid+' WHERE '+whereKeys(tview);
|
||||
// debug('findAllCount param %s',JSON.stringify(dataParam));
|
||||
// debug('findAllCount sql %s',querySql);
|
||||
// var query = self.db.query(querySql, dataParam, function (err, result) {
|
||||
// if (err) {
|
||||
// debug(err);
|
||||
// cb(err);
|
||||
// } else {
|
||||
// cb(err,result.rows[0]);
|
||||
// }
|
||||
// });
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function autoFieldType(fieldMeta,fieldType) {
|
||||
if (!fieldMeta) {
|
||||
throw new Error('no fieldMeta');
|
||||
}
|
||||
if (fieldType && fieldType.length != 0) {
|
||||
return fieldType;
|
||||
}
|
||||
if (fieldMeta.type == Date) {
|
||||
return 'date';
|
||||
}
|
||||
return 'text';
|
||||
}
|
||||
|
||||
buildFields = function(modelMeta) {
|
||||
if (!modelMeta) {
|
||||
throw new Error('no modelMeta');
|
||||
}
|
||||
var tfields = {};
|
||||
var keys = Object.keys(modelMeta);
|
||||
for (i = 0; i < keys.length; i++) {
|
||||
var key = keys[i];
|
||||
var value = modelMeta[key];
|
||||
var tfield = null;
|
||||
if (key && value && value.tfield) {
|
||||
debug('tfield model cloned');
|
||||
tfield = clone(value.tfield);
|
||||
tfield.tid = key;
|
||||
tfield.tname = tfield.tname;
|
||||
tfield.type = autoFieldType(value,tfield.ttype);
|
||||
} else if (key && value) {
|
||||
debug('tfield model auto created');
|
||||
tfield = config.createTField(key);
|
||||
tfield.type = autoFieldType(value);
|
||||
}
|
||||
if (tfield.tvalidate && tfield.tvalidate.io) {
|
||||
debug('tfield validate rule: '+tfield.tvalidate.io);
|
||||
}
|
||||
tfields[tfield.tid] = tfield;
|
||||
}
|
||||
return tfields;
|
||||
}
|
||||
|
||||
function ss(valueRule) {
|
||||
return function (value, response) {
|
||||
response(validate(valueRule,value));
|
||||
};
|
||||
}
|
||||
|
||||
createModelValidators = function (modelSchema,modelFields) {
|
||||
if (!modelSchema) {
|
||||
throw new Error('no modelSchema');
|
||||
}
|
||||
if (!modelFields) {
|
||||
throw new Error('no modelFields');
|
||||
}
|
||||
var keys = Object.keys(modelFields);
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var key = keys[i];
|
||||
var tfield = modelFields[key];
|
||||
if (!tfield.tvalidate) {
|
||||
continue;
|
||||
}
|
||||
if (!tfield.tvalidate.io) {
|
||||
continue;
|
||||
}
|
||||
modelSchema.path(tfield.tid).validate(ss(tfield.tvalidate.io), '{PATH} validation failed: '+tfield.tvalidate.io);
|
||||
}
|
||||
}
|
||||
|
||||
buildStatics = function(modelFields,modelStatics) {
|
||||
if (!modelFields) {
|
||||
throw new Error('no modelFields');
|
||||
}
|
||||
if (!modelStatics) {
|
||||
modelStatics = {};
|
||||
}
|
||||
modelStatics['ff_tcrud_fields'] = modelFields;
|
||||
return modelStatics;
|
||||
}
|
||||
|
||||
buildTEntityModel = function(mongoose,tcrudParent,name) {
|
||||
var model = mongoose.model(name);
|
||||
var tcrud = config.createTEntity(tcrudParent,name, '_id');
|
||||
var tfields = model['ff_tcrud_fields'];
|
||||
if (tfields) {
|
||||
tcrud.tmeta.tfields = tfields;
|
||||
}
|
||||
tcrud.tmodel = name;
|
||||
|
||||
return tcrud;
|
||||
}
|
||||
|
||||
buildTEntityModels = function(conn,tcrudParent) {
|
||||
var result = [];
|
||||
var modelNames = conn.modelNames();
|
||||
for (var i = 0; i < modelNames.length; i++) {
|
||||
result.push(buildTEntityModel(conn,tcrudParent,modelNames[i]))
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// ----- wrappers
|
||||
|
||||
buildStaticsModel = function(modelMeta,modelStatics) {
|
||||
return buildStatics(buildFields(modelMeta),modelStatics);
|
||||
}
|
||||
|
||||
buildStaticsModelValidated = function(modelMeta,modelSchema,modelStatics) {
|
||||
var modelFields = buildFields(modelMeta);
|
||||
createModelValidators(modelSchema,modelFields);
|
||||
return buildStatics(modelFields,modelStatics);
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
buildTEntityModels: buildTEntityModels,
|
||||
buildStaticsModelValidated: buildStaticsModelValidated,
|
||||
buildFields: buildFields,
|
||||
registrate: function(key,conn) {
|
||||
config.registratePlugin(new MongoosePlugin(key,conn));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue