rapnc
Version:
Node client for RAP 1.0
199 lines (177 loc) • 6.63 kB
JavaScript
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;