UNPKG

caradoc-entity

Version:

entity managment for caradoc framework

307 lines (277 loc) 10.1 kB
var connection = require('caradoc-sql'); var path = require('path'); var fs = require('fs'); var event = require('events').EventEmitter; var util = require('util'); /** * * @param {String} objectName * @constructor */ function Find (objectName){ var entity = require('caradoc-entity'); var Object = new entity.generate[objectName](); var self = this; event.call(self); /** * * @param {Object}join * @param {function(Object, Object, Object)} callback */ this['getAll'] = function(join, callback){ if(join){ } else{ var queryAll = 'SELECT * FROM '+ objectName ; connection.query(queryAll, function(err, rows, field){ if(err){ if(!callback) self.emit('error', err); else callback(err, null, null); } if(rows && field){ if(!callback){self.emit('rows', rows); self.emit('field', field);} else{callback(null,rows, field); } } else{ if(rows){ if(!callback) self.emit('rows', rows); else callback(null,rows, null); } else if(field){ if(!callback) self.emit('field', field); else callback(null, null, field); } } }); } }; /* * find(object).ByX(value) * * */ //console.log(Object); for(var key in Object){ var query = 'SELECT * FROM user WHERE ' + key + "=\'"; if (((key.toString().toLowerCase() != "params") && (key.toString().toLowerCase() != "inheritfrom") && (key.toString().toLowerCase() != "entityname"))) { (function(insideQuery, obj){ addMethod("getBy" + key.charAt(0).toUpperCase() + key.slice(1), obj, function(args, callback) { insideQuery+= args + "\'"; console.log(insideQuery); connection.query(insideQuery, function(err, rows , field){ if(err){ if(!callback) self.emit('error', err); else callback(err); } if(rows && field){ if(!callback){self.emit('rows', rows); self.emit('field', field);} else{callback(null,rows, field); } } else{ if(rows){ if(!callback) self.emit('rows', rows); else callback(null,rows); } if(field){ if(!callback) self.emit('field', field); else callback(null, null, field); } } }); }); })(query, this); } } /* * find () .by * args = { * where :{ * value1 : value , * value2 : value * }, * order :{ * value1 :ASC/DESC * } * limit :{ * offset : X , * ligne : X * } * */ this['getBy'] = function(args, callback) { var query = "SELECT * FROM " + objectName ; var compteur = 0; var whereQuery = ''; var orderQuery = ''; var limitQuery = ''; for(var value in args) { if (value.toString().toLowerCase() == 'where') { whereQuery+= " WHERE ("; for(var subValue in args[value]){ if(compteur == 0) { whereQuery += subValue + "=" + "\'" + args[value][subValue] + "\' "; compteur++; } else { whereQuery += " && " + subValue + "=" + "\'" + args[value][subValue] + "\' "; } } whereQuery += ")"; } if(value.toString().toLowerCase() == 'order') { orderQuery += " ORDER BY "; for(var subValue in args[value]){ orderQuery += " " + subValue + " " + args[value][subValue]; } } if(value.toString().toLowerCase() == 'limit') { limitQuery += " LIMIT "; for(var subValue in args[value]){ orderQuery += " " + args[value]['offset'] + "," + args[value]['ligne']; } } } query += whereQuery + orderQuery + limitQuery; console.log(query); /** * @param {String} query * @param {function(Object, Object, Object)} */ connection.query(query, function(err, rows , field){ if(err){ if(!callback) self.emit('error', err); else callback(err); } if(rows && field){ if(!callback){self.emit('rows', rows); self.emit('field', field);} else{callback(null,rows, field); } } else{ if(rows){ if(!callback) self.emit('rows', rows); else callback(null,rows); } if(field){ if(!callback) self.emit('field', field); else callback(null, null, field); } } }); }; /* * find () .oneBy * args = { * where :{ * value1 : value , * value2 : value * } */ this['getOneBy'] = function(args, callback) { var query = "SELECT * FROM " + objectName ; var compteur = 0; var whereQuery = ''; var orderQuery = ''; var limitQuery = ''; for(var value in args) { if (value.toString().toLowerCase() == 'where') { whereQuery+= " WHERE ("; for(var subValue in args[value]){ if(compteur == 0) { whereQuery += subValue + "=" + "\'" + args[value][subValue] + "\' "; compteur++; } else { whereQuery += " && " + subValue + "=" + "\'" + args[value][subValue] + "\' "; } } whereQuery += ")"; } if(value.toString().toLowerCase() == 'limit') { limitQuery += " LIMIT 0,1"; } } query += whereQuery + orderQuery + limitQuery; console.log(query); connection.query(query, function(err, rows, field){ if(err){ if(!callback) self.emit('error', err); else callback(err); } if(rows && field){ if(!callback){self.emit('rows', rows); self.emit('field', field);} else{callback(null,rows, field); } } else{ if(rows){ if(!callback) self.emit('rows', rows); else callback(null,rows); } if(field){ if(!callback) self.emit('field', field); else callback(null, null, field); } } }); }; /* * add custom queries * * * */ var bundle = require('../../../config/routes').get; var entityFound = {}; for(var key in bundle){ (function(currentKey, obj){ var src = path.resolve(__dirname,"../../../src/"+bundle[currentKey].name+"/entityRepo/"); if(fs.existsSync(src)){ var list = fs.readdirSync(src); for (var i in list){ var file = list[i].split('.'); // return the file name without the extension if(file[0].toString().toLowerCase() == objectName.toString().toLowerCase()) entityFound[file[0]] = require(src+'/'+list[i]); //add the give entity to the find method for(var newKey in entityFound['user']){ var fn = entityFound['user']; addMethod(newKey, obj ,function(args, callback){ var query = fn[newKey](args); connection.query(query, function(err, rows , field){ if(err){ if(!callback) self.emit('error', err); else callback(err); } if(rows && field){ if(!callback){self.emit('rows', rows); self.emit('field', field);} else{callback(null,rows, field); } } else{ if(rows){ if(!callback) self.emit('rows', rows); else callback(null,rows); } if(field){ if(!callback) self.emit('field', field); else callback(null, null, field); } } }); }); } } } })(key, this); } } util.inherits(Find, event); exports.find = Find; /** * * @param { String} key * @param { Object } obj * @param { function(object, object, object)} fn */ function addMethod(key, obj, fn){ obj[key] = fn; }