|
|
@ -30,14 +30,17 @@ class Xapi { |
|
|
|
|
|
|
|
|
|
|
|
urlMiddleware(req, res, next) { |
|
|
|
urlMiddleware(req, res, next) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// get only request url from originalUrl
|
|
|
|
let justUrl = req.originalUrl.split('?')[0] |
|
|
|
let justUrl = req.originalUrl.split('?')[0] |
|
|
|
let pathSplit = justUrl.split('/') |
|
|
|
let pathSplit = justUrl.split('/') |
|
|
|
|
|
|
|
|
|
|
|
if (pathSplit.length >= 2 && pathSplit[1] === 'api') { |
|
|
|
if (pathSplit.length >= 2 && pathSplit[1] === 'api') { |
|
|
|
if (pathSplit.length >= 5) { |
|
|
|
if (pathSplit.length >= 5) { |
|
|
|
|
|
|
|
// handle for relational routes
|
|
|
|
req.app.locals._parentTable = pathSplit[2] |
|
|
|
req.app.locals._parentTable = pathSplit[2] |
|
|
|
req.app.locals._childTable = pathSplit[4] |
|
|
|
req.app.locals._childTable = pathSplit[4] |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
|
|
|
|
// handles rest of routes
|
|
|
|
req.app.locals._tableName = pathSplit[2] |
|
|
|
req.app.locals._tableName = pathSplit[2] |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -66,30 +69,34 @@ class Xapi { |
|
|
|
|
|
|
|
|
|
|
|
root(req, res) { |
|
|
|
root(req, res) { |
|
|
|
|
|
|
|
|
|
|
|
let v = []; |
|
|
|
let routes = []; |
|
|
|
v = this.mysql.getSchemaRoutes(false, req.protocol + '://' + req.get('host') + '/api/'); |
|
|
|
routes = this.mysql.getSchemaRoutes(false, req.protocol + '://' + req.get('host') + '/api/'); |
|
|
|
v = v.concat(this.mysql.globalRoutesPrint(req.protocol + '://' + req.get('host') + '/api/')) |
|
|
|
routes = routes.concat(this.mysql.globalRoutesPrint(req.protocol + '://' + req.get('host') + '/api/')) |
|
|
|
|
|
|
|
res.json(routes) |
|
|
|
res.json(v) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setupRoutes() { |
|
|
|
setupRoutes() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// show routes for database schema
|
|
|
|
this.app.get('/', this.asyncMiddleware(this.root.bind(this))) |
|
|
|
this.app.get('/', this.asyncMiddleware(this.root.bind(this))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// show all resouces
|
|
|
|
this.app.route('/api/tables') |
|
|
|
this.app.route('/api/tables') |
|
|
|
.get(this.asyncMiddleware(this.tables.bind(this))); |
|
|
|
.get(this.asyncMiddleware(this.tables.bind(this))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let resources = []; |
|
|
|
/**************** START : setup routes for each table ****************/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let resources = []; |
|
|
|
resources = this.mysql.getSchemaRoutes(true, '/api/'); |
|
|
|
resources = this.mysql.getSchemaRoutes(true, '/api/'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// iterate over each resource
|
|
|
|
for (var j = 0; j < resources.length; ++j) { |
|
|
|
for (var j = 0; j < resources.length; ++j) { |
|
|
|
|
|
|
|
|
|
|
|
let routes = resources[j]['routes']; |
|
|
|
let routes = resources[j]['routes']; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// iterate over rach routes in resource and map function
|
|
|
|
for (var i = 0; i < routes.length; ++i) { |
|
|
|
for (var i = 0; i < routes.length; ++i) { |
|
|
|
|
|
|
|
|
|
|
|
switch (routes[i]['routeType']) { |
|
|
|
switch (routes[i]['routeType']) { |
|
|
@ -142,36 +149,12 @@ class Xapi { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/**************** END : setup routes for each table ****************/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// this.app.route('/api/:tableName/describe')
|
|
|
|
|
|
|
|
// .get(this.asyncMiddleware(this.tableDescribe.bind(this)));
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// /**************** START : basic apis ****************/
|
|
|
|
|
|
|
|
// this.app.route('/api/:tableName/count')
|
|
|
|
|
|
|
|
// .get(this.asyncMiddleware(this.count.bind(this)));
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// this.app.route('/api/:tableName')
|
|
|
|
|
|
|
|
// .get(this.asyncMiddleware(this.list.bind(this)))
|
|
|
|
|
|
|
|
// .post(this.asyncMiddleware(this.create.bind(this)));
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// this.app.route('/api/:tableName/:id')
|
|
|
|
|
|
|
|
// .get(this.asyncMiddleware(this.read.bind(this)))
|
|
|
|
|
|
|
|
// .put(this.asyncMiddleware(this.update.bind(this)))
|
|
|
|
|
|
|
|
// .delete(this.asyncMiddleware(this.delete.bind(this)));
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// this.app.route('/api/:tableName/:id/exists')
|
|
|
|
|
|
|
|
// .get(this.asyncMiddleware(this.exists.bind(this)));
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// this.app.route('/api/:parentTable/:id/:childTable')
|
|
|
|
|
|
|
|
// .get(this.asyncMiddleware(this.nestedList.bind(this)));
|
|
|
|
|
|
|
|
// /**************** END : basic apis ****************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (this.sqlConfig.dynamic === 1) { |
|
|
|
if (this.sqlConfig.dynamic === 1) { |
|
|
|
|
|
|
|
|
|
|
|
this.app.route('/dynamic*') |
|
|
|
this.app.route('/dynamic*') |
|
|
|
.post(this.asyncMiddleware(this.runQuery.bind(this))); |
|
|
|
.post(this.asyncMiddleware(this.runQuery.bind(this))); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|