yapi-next/vendors/common/HandleImportData.js
2023-06-27 18:59:45 +08:00

160 lines
4.0 KiB
JavaScript

const _ = require('underscore');
const axios = require('axios');
const isNode = typeof global == 'object' && global.global === global;
async function handle(
res,
projectId,
selectCatid,
menuList,
basePath,
dataSync,
messageError,
messageSuccess,
callback,
token,
port
) {
const taskNotice = _.throttle((index, len)=>{
messageSuccess(`正在导入,已执行任务 ${index+1} 个,共 ${len}`)
}, 3000)
const handleAddCat = async cats => {
let catsObj = {};
if (cats && Array.isArray(cats)) {
for (let i = 0; i < cats.length; i++) {
let cat = cats[i];
let findCat = _.find(menuList, menu => menu.name === cat.name);
catsObj[cat.name] = cat;
if (findCat) {
cat.id = findCat._id;
} else {
let apipath = '/api/interface/add_cat';
if (isNode) {
apipath = 'http://127.0.0.1:' + port + apipath;
}
let data = {
name: cat.name,
project_id: projectId,
desc: cat.desc,
token
};
let result = await axios.post(apipath, data);
if (result.data.errcode) {
messageError(result.data.errmsg);
callback({ showLoading: false });
return false;
}
cat.id = result.data.data._id;
}
}
}
return catsObj;
};
const handleAddInterface = async info => {
const cats = await handleAddCat(info.cats);
if (cats === false) {
return;
}
const res = info.apis;
let len = res.length;
let count = 0;
let successNum = len;
let existNum = 0;
if (len === 0) {
messageError(`解析数据为空`);
callback({ showLoading: false });
return;
}
if(info.basePath){
let projectApiPath = '/api/project/up';
if (isNode) {
projectApiPath = 'http://127.0.0.1:' + port + projectApiPath;
}
await axios.post(projectApiPath, {
id: projectId,
basepath: info.basePath,
token
})
}
for (let index = 0; index < res.length; index++) {
let item = res[index];
let data = Object.assign(item, {
project_id: projectId,
catid: selectCatid
});
if (basePath) {
data.path =
data.path.indexOf(basePath) === 0 ? data.path.substr(basePath.length) : data.path;
}
if (
data.catname &&
cats[data.catname] &&
typeof cats[data.catname] === 'object' &&
cats[data.catname].id
) {
data.catid = cats[data.catname].id;
}
data.token = token;
if (dataSync !== 'normal') {
// 开启同步功能
count++;
let apipath = '/api/interface/save';
if (isNode) {
apipath = 'http://127.0.0.1:' + port + apipath;
}
data.dataSync = dataSync;
let result = await axios.post(apipath, data);
if (result.data.errcode) {
successNum--;
callback({ showLoading: false });
messageError(result.data.errmsg);
} else {
existNum = existNum + result.data.data.length;
}
} else {
// 未开启同步功能
count++;
let apipath = '/api/interface/add';
if (isNode) {
apipath = 'http://127.0.0.1:' + port + apipath;
}
let result = await axios.post(apipath, data);
if (result.data.errcode) {
successNum--;
if (result.data.errcode == 40022) {
existNum++;
}
if (result.data.errcode == 40033) {
callback({ showLoading: false });
messageError('没有权限');
break;
}
}
}
if (count === len) {
callback({ showLoading: false });
messageSuccess(`成功导入接口 ${successNum} 个, 已存在的接口 ${existNum}`);
return;
}
taskNotice(index, res.length)
}
};
return await handleAddInterface(res);
}
module.exports = handle;