UNPKG

rapnc

Version:

Node client for RAP 1.0

199 lines (177 loc) 6.63 kB
var helper = require('./helper'); var schema = require('../helpers/index').schema; var async = require('async'); var error = helper.error; var getSubParams = helper.getSubParams; var getIds = helper.getIds; function getProjectJson(projectId, callback) { if (global.RAP_MODE != 'online') { callback('The RAP server is in offline mode, no project should be pulled'); return; } if (!projectId) { callback('missing params'); return; } if (!/^\d+$/.test(projectId)) { callback('projectId should be number'); return; } async.auto({ getProjectInfo: function(next) { helper.sql( 'select a.id as projectId, a.name as projectName, a.introduction as description, b.account as creator ' + ' from tb_project a, tb_user b ' + ' where (a.user_id is null or a.user_id = b.id) and a.id = ' + projectId, next); }, getActionIds: function(next) { helper.sql( 'select d.action_id from tb_project a, tb_module b, tb_page c, tb_action_and_page d ' + ' where a.id = ' + projectId + ' and a.id = b.project_id ' + ' and b.id = c.module_id and c.id = d.page_id', next); }, getAction: ['getActionIds', function(next, results) { var actions = results.getActionIds; if (!actions || actions.length == 0) { callback(error(projectId)); return; } var ids = []; actions.forEach(function(a) { ids.push(a.action_id); }) helper.sql('select * from tb_action ' + 'where id in (' + ids.join(',') + ' )', next) }], getRequestParams: ['getAction', function(next, results) { var action = results.getAction; if (!action || action.length == 0) { callback(error(projectId)); return; } var ids = []; action.forEach(function(a) { ids.push(a.id); }) helper.sql('select * from tb_request_parameter_list_mapping a, tb_parameter b ' + ' where b.id = a.parameter_id and ' + ' a.action_id in (' + ids.join(',') + ')', next) }], getResponseParams: ['getAction', function(next, results) { var action = results.getAction; if (!action || action.length == 0) { callback(error(projectId)); return; } var ids = []; action.forEach(function(a) { ids.push(a.id); }) helper.sql('select * from tb_response_parameter_list_mapping a, tb_parameter b ' + ' where b.id = a.parameter_id and ' + ' a.action_id in (' + ids.join(',') + ')', next) }], getComplexRequestParams: ['getRequestParams', function(next, results) { var params = results.getRequestParams; if (!params || params.length == 0) { return next(); } var ids = getIds(params); if (ids.length == 0) { return next(); } getSubParams(ids, [], function(err, list) { next(err, list); }); }], getComplexResponseParams: ['getResponseParams', function(next, results) { var params = results.getResponseParams; if (!params || params.length == 0) { return next(); } var ids = getIds(params); if (ids.length == 0) { return next(); } getSubParams(ids, [], function(err, list) { next(err, list); }); }] }, function(err, results) { if (err) { callback(err); return; } var projectInfo = results.getProjectInfo; if (!projectInfo || projectInfo.length == 0) { callback('no project found by id : ' + projectId); return; } var project = projectInfo[0]; var actions = results.getAction; project.actions = actions; var requests = results.getRequestParams; var responses = results.getResponseParams; var complexRequest = results.getComplexRequestParams; var complexResponse = results.getComplexResponseParams; var paramsMapper = {}; var actionMapper = {}; actions && actions.forEach(function(action) { actionMapper[action.id] = action; delete action.response_template; delete action.id; action.requestParams = []; action.responseParams = []; }); requests && requests.forEach(function(r) { paramsMapper[r.id] = r; var actionId = r.action_id; delete r.parameter_id; delete r.action_id; //delete r.id; delete r.mock_data; delete r.expression; actionMapper[actionId].requestParams.push(r); }); responses && responses.forEach(function(r) { paramsMapper[r.id] = r; var actionId = r.action_id; delete r.parameter_id; delete r.action_id; //delete r.id; actionMapper[actionId].responseParams.push(r); }); complexRequest && complexRequest.forEach(function(r) { paramsMapper[r.id] = r; //delete r.id; }); complexResponse && complexResponse.forEach(function(r) { paramsMapper[r.id] = r; //delete r.id; }); complexRequest && complexRequest.forEach(function(r) { var id = r.complex_parameter_id; delete r.complex_parameter_id; var upper = paramsMapper[id]; if (!upper) { return; } upper.params = upper.params || []; upper.params.push(r); }); complexResponse && complexResponse.forEach(function(r) { var id = r.complex_parameter_id; delete r.complex_parameter_id; var upper = paramsMapper[id]; if (!upper) { return; } upper.params = upper.params || []; upper.params.push(r); }); project = schema.dbToSchema(project); callback(null, project); }) } module.exports = getProjectJson;