diff --git a/wi/http/data/endpoint.js b/wi/http/data/endpoint.js index c0ec15658..6be084c66 100644 --- a/wi/http/data/endpoint.js +++ b/wi/http/data/endpoint.js @@ -1,7 +1,7 @@ var auth = require('../../core/jwt_auth.js').auth; var sql = require('./sql.js'); -var RegisterEndpoint = function(app, api, single_name, plural_name, pkey) { +var RegisterEndpoint = function(app, api, single_name, plural_name, pkey, skeys) { app.get('/api/data/' + single_name + '/:' + pkey, auth, function (req, res) { sql.Retrieve(req, res, plural_name, pkey); }); @@ -15,7 +15,7 @@ var RegisterEndpoint = function(app, api, single_name, plural_name, pkey) { }); app.post('/api/data/' + single_name + '/search', auth, function (req, res) { - sql.Search(req, res, plural_name, pkey, res); + sql.Search(req, res, plural_name, pkey, skeys); }); }; diff --git a/wi/http/data/index.js b/wi/http/data/index.js index 44c1c6fe6..f0d87b016 100644 --- a/wi/http/data/index.js +++ b/wi/http/data/index.js @@ -1,7 +1,7 @@ var endpoint = require('./endpoint.js'); var RegisterAPI = function(app, api) { - endpoint.Register(app, api, 'item', 'items', 'id'); + endpoint.Register(app, api, 'item', 'items', 'id', ['name']); }; module.exports = { diff --git a/wi/http/data/sql.js b/wi/http/data/sql.js index e1e8f2973..bd174be2c 100644 --- a/wi/http/data/sql.js +++ b/wi/http/data/sql.js @@ -181,13 +181,8 @@ function Delete(req, res, table, pkey) { }); } -function Search(req, res, table, pkey) { +function Search(req, res, table, pkey, skeys) { //Verify incoming model - if(!req.body.hasOwnProperty('draw')) { - res.sendStatus(400); - return; - } - if(!req.body.hasOwnProperty('start')) { res.sendStatus(400); return; @@ -203,16 +198,6 @@ function Search(req, res, table, pkey) { return; } - if(!req.body.hasOwnProperty('columns')) { - res.sendStatus(400); - return; - } - - if(!req.body.hasOwnProperty('order')) { - res.sendStatus(400); - return; - } - req.mysql.getConnection(function(err, connection) { try { if(err) { @@ -222,100 +207,46 @@ function Search(req, res, table, pkey) { return; } - var ret = { }; - ret.draw = req.body['draw']; - ret.data = []; - - var query = 'SELECT '; + var query = 'SELECT * FROM ' + table; + var first = true; var idx; var args = []; - var first = true; - for(idx in req.body['columns']) { - var column = req.body['columns'][idx]; + var searchTerm = '%' + req.body['search'] + '%'; + for(idx in skeys) { + var skey = skeys[idx]; if(first) { first = false; + query += ' WHERE '; } else { - query += ', '; + query += ' OR '; } - query += connection.escapeId(column.data); + query += skey; + query += ' LIKE ?'; + args.push(searchTerm); } - query += ' FROM ' + table; + query += ' ORDER BY ' + pkey + ' ASC'; + query += ' LIMIT ?, ?'; + args.push(req.body['start']); + args.push(req.body['length']); - first = true; - for(idx in req.body['order']) { - var order = req.body['order'][idx]; - if(first) { - query += ' ORDER BY '; - first = false; - } else { - query += ', '; - } - - var column = req.body['columns'][order.column]; - - query += connection.escapeId(column.data); - - if(order.dir === 'asc') { - query += ' ASC'; - } else { - query += ' DESC'; - } - } - connection.query(query, args, function (error, results, fields) { try { - if(error) { - console.log(error); - connection.release(); - res.sendStatus(400); - return; - } + var ret = []; - ret.recordsTotal = results.length; - - for(var result_idx in results) { - var result = results[result_idx]; - if(req.body['search'].value && req.body['search'].value.length > 0) { - var found = false; - - for(idx in req.body['columns']) { - var column = req.body['columns'][idx]; - - if(column.searchable) { - if(String(result[column.data]).toLowerCase().includes(String(req.body['search'].value).toLowerCase())) { - found = true; - break; - } - } - } - - if(found) { - var obj = { }; - - for(var i in result) { - var value = result[i]; - obj[i] = value; - } - - ret.data.push(obj); - } - } else { - var obj = { }; - - for(var i in result) { - var value = result[i]; - obj[i] = value; - } - - ret.data.push(obj); + for(idx in results) { + var result = results[idx]; + var obj = { }; + + for(var i in result) { + var value = result[i]; + obj[i] = value; } + + ret.push(obj); } - ret.recordsFiltered = ret.data.length; - ret.data = ret.data.slice(req.body['start'], req.body['start'] + req.body['length']); - connection.release(); res.json(ret); } catch(ex) {