yapi/exts/yapi-plugin-advanced-mock/controller.js
2017-11-03 15:01:31 +08:00

162 lines
4.6 KiB
JavaScript

const baseController = require('controllers/base.js');
const advModel = require('./advMockModel.js');
const yapi = require('yapi.js');
const caseModel = require('./caseModel.js');
const userModel = require('models/user.js');
const config = require('./index.js');
class advMockController extends baseController{
constructor(ctx){
super(ctx);
this.Model = yapi.getInst(advModel);
this.caseModel = yapi.getInst(caseModel);
this.userModel = yapi.getInst(userModel);
}
async getMock(ctx){
let id = ctx.query.interface_id;
let mockData = await this.Model.get(id);
if(!mockData){
return ctx.body = yapi.commons.resReturn(null, 408, 'mock脚本不存在');
}
return ctx.body = yapi.commons.resReturn(mockData);
}
async upMock(ctx){
let params = ctx.request.body;
try{
if(!params.interface_id){
return ctx.body =yapi.commons.resReturn(null, 408, '缺少interface_id');
}
if(!params.project_id){
return ctx.body =yapi.commons.resReturn(null, 408, '缺少project_id');
}
let data = {
interface_id: params.interface_id,
mock_script: params.mock_script || '',
project_id: params.project_id,
uid: this.getUid(),
enable: params.enable === true ? true : false
}
let result;
let mockData = await this.Model.get(data.interface_id);
if(mockData){
result = await this.Model.up(data);
}else{
result = await this.Model.save(data);
}
return ctx.body = yapi.commons.resReturn(result);
}catch(e){
return ctx.body = yapi.commons.resReturn(null, 400, e.message);
}
}
async list(ctx){
let id = ctx.query.interface_id;
if(!id){
return ctx.body = yapi.commons.resReturn(null, 400, '缺少 interface_id');
}
let result = await this.caseModel.list(id);
for(let i = 0, len = result.length; i < len; i++) {
let userinfo = await this.userModel.findById(result[i].uid);
result[i] = result[i].toObject();
result[i].username = userinfo.username;
}
ctx.body = yapi.commons.resReturn(result);
}
async getCase(ctx){
let id = ctx.query.id;
if(!id){
return ctx.body = yapi.commons.resReturn(null, 400, '缺少 id');
}
let result = await this.caseModel.get({
_id: id
})
ctx.body = yapi.commons.resReturn(result);
}
async saveCase(ctx){
let params = ctx.request.body;
if(!params.interface_id){
return ctx.body =yapi.commons.resReturn(null, 408, '缺少interface_id');
}
if(!params.project_id){
return ctx.body =yapi.commons.resReturn(null, 408, '缺少project_id');
}
if(!params.res_body){
return ctx.body =yapi.commons.resReturn(null, 408, '请输入 Response Body');
}
let data = {
interface_id: params.interface_id,
project_id: params.project_id,
ip_enable: params.ip_enable,
name: params.name,
params: params.params || [],
uid: this.getUid(),
code: params.code || 200,
delay: params.delay || 0,
headers: params.headers || [],
up_time: yapi.commons.time(),
res_body: params.res_body,
ip: params.ip
}
data.code = isNaN(data.code) ? 200 : +data.code;
data.delay = isNaN(data.delay) ? 0 : +data.delay;
if(config.httpCodes.indexOf(data.code) === -1){
return ctx.body =yapi.commons.resReturn(null, 408, '非法的 httpCode');
}
let findRepeat, findRepeatParams;
findRepeatParams = {
project_id: data.project_id,
interface_id: data.interface_id,
ip_enable: data.ip_enable
}
if(data.params && typeof data.params === 'object' && Object.keys(data.params).length >0){
for(let i in data.params){
findRepeatParams['params.' + i] = data.params[i];
}
}else{
findRepeatParams.params = null;
}
if(data.ip_enable){
findRepeatParams.ip = data.ip;
}
findRepeat = await this.caseModel.get(findRepeatParams);
if(findRepeat && findRepeat._id !== params.id){
return ctx.body = yapi.commons.resReturn(null,400, '已存在的期望');
}
let result;
if(params.id && !isNaN(params.id)){
data.id = +params.id;
result = await this.caseModel.up(data);
}else{
result = await this.caseModel.save(data);
}
return ctx.body = yapi.commons.resReturn(result);
}
async delCase(ctx){
let id = ctx.request.body.id;
if(!id){
return ctx.body =yapi.commons.resReturn(null, 408, '缺少 id');
}
let result = await this.caseModel.del(id);
return ctx.body = yapi.commons.resReturn(result);
}
}
module.exports = advMockController;