yapi/server/controllers/log.js
2018-07-10 17:22:35 +08:00

146 lines
4.3 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const logModel = require('../models/log.js');
const yapi = require('../yapi.js');
const baseController = require('./base.js');
const groupModel = require('../models/group');
const projectModel = require('../models/project');
const interfaceModel = require('../models/interface');
class logController extends baseController {
constructor(ctx) {
super(ctx);
this.Model = yapi.getInst(logModel);
this.groupModel = yapi.getInst(groupModel);
this.projectModel = yapi.getInst(projectModel);
this.interfaceModel = yapi.getInst(interfaceModel);
this.schemaMap = {
listByUpdate: {
'*type': 'string',
'*typeid': 'number',
apis: [
{
method: 'string',
path: 'string'
}
]
}
};
}
/**
* 获取动态列表
* @interface /log/list
* @method GET
* @category log
* @foldnumber 10
* @param {Number} typeid 动态类型id 不能为空
* @param {Number} [page] 分页页码
* @param {Number} [limit] 分页大小
* @returns {Object}
* @example /log/list
*/
async list(ctx) {
let typeid = ctx.request.query.typeid,
page = ctx.request.query.page || 1,
limit = ctx.request.query.limit || 10,
type = ctx.request.query.type,
selectValue = ctx.request.query.selectValue;
if (!typeid) {
return (ctx.body = yapi.commons.resReturn(null, 400, 'typeid不能为空'));
}
if (!type) {
return (ctx.body = yapi.commons.resReturn(null, 400, 'type不能为空'));
}
try {
if (type === 'group') {
let projectList = await this.projectModel.list(typeid);
let projectIds = [],
projectDatas = {};
for (let i in projectList) {
projectDatas[projectList[i]._id] = projectList[i];
projectIds[i] = projectList[i]._id;
}
let projectLogList = await this.Model.listWithPagingByGroup(
typeid,
projectIds,
page,
limit
);
projectLogList.forEach((item, index) => {
item = item.toObject();
if (item.type === 'project') {
item.content =
`在 <a href="/project/${item.typeid}">${projectDatas[item.typeid].name}</a> 项目: ` +
item.content;
}
projectLogList[index] = item;
});
let total = await this.Model.listCountByGroup(typeid, projectIds);
ctx.body = yapi.commons.resReturn({
list: projectLogList,
total: Math.ceil(total / limit)
});
} else if (type === "project") {
let result = await this.Model.listWithPaging(typeid, type, page, limit, selectValue);
let count = await this.Model.listCount(typeid, type, selectValue);
ctx.body = yapi.commons.resReturn({
total: Math.ceil(count / limit),
list: result
});
}
} catch (err) {
ctx.body = yapi.commons.resReturn(null, 402, err.message);
}
}
/**
* 获取特定cat_id下最新修改的动态信息
* @interface /log/list_by_update
* @method post
* @category log
* @foldnumber 10
* @param {Number} typeid 动态类型id 不能为空
* @returns {Object}
* @example /log/list
*/
async listByUpdate(ctx) {
let params = ctx.params;
try {
let { typeid, type, apis } = params;
let list = [];
let projectDatas = await this.projectModel.getBaseInfo(typeid, 'basepath');
let basePath = projectDatas.toObject().basepath;
for (let i = 0; i < apis.length; i++) {
let api = apis[i];
if (basePath) {
api.path = api.path.indexOf(basePath) === 0 ? api.path.substr(basePath.length) : api.path;
}
let interfaceIdList = await this.interfaceModel.getByPath(
typeid,
api.path,
api.method,
'_id'
);
for (let j = 0; j < interfaceIdList.length; j++) {
let interfaceId = interfaceIdList[j];
let id = interfaceId.id;
let result = await this.Model.listWithCatid(typeid, type, id);
list = list.concat(result);
}
}
// let result = await this.Model.listWithCatid(typeid, type, catId);
ctx.body = yapi.commons.resReturn(list);
} catch (err) {
ctx.body = yapi.commons.resReturn(null, 402, err.message);
}
}
}
module.exports = logController;