yapi-next/vendors/server/models/interface.js
2023-06-27 18:59:45 +08:00

360 lines
7.9 KiB
JavaScript
Executable File

const yapi = require('../yapi.js')
const baseModel = require('./base.js')
class interfaceModel extends baseModel {
getName() {
return 'interface'
}
getSchema() {
return {
title: { type: String, required: true },
uid: { type: Number, required: true },
path: { type: String, required: true },
method: { type: String, required: true },
project_id: { type: Number, required: true },
catid: { type: Number, required: true },
edit_uid: { type: Number, default: 0 },
status: { type: String, enum: ['undone', 'done'], default: 'undone' },
desc: String,
markdown: String,
add_time: Number,
up_time: Number,
type: { type: String, enum: ['static', 'var'], default: 'static' },
query_path: {
path: String,
params: [
{
name: String,
value: String
}
]
},
req_query: [
{
name: String,
value: String,
example: String,
desc: String,
required: {
type: String,
enum: ['1', '0'],
default: '1'
},
type: {
type: String,
enum: ['string', 'number'],
default: 'string'
}
}
],
req_headers: [
{
name: String,
value: String,
example: String,
desc: String,
required: {
type: String,
enum: ['1', '0'],
default: '1'
}
}
],
req_params: [
{
name: String,
desc: String,
example: String,
type: {
type: String,
enum: ['string', 'number'],
default: 'string'
}
}
],
req_body_type: {
type: String,
enum: ['form', 'json', 'text', 'file', 'raw']
},
req_body_is_json_schema: { type: Boolean, default: false },
req_body_form: [
{
name: String,
type: { type: String, enum: ['text', 'file'] },
example: String,
value: String,
desc: String,
required: {
type: String,
enum: ['1', '0'],
default: '1'
}
}
],
req_body_other: String,
res_body_type: {
type: String,
enum: ['json', 'text', 'xml', 'raw', 'json-schema']
},
res_body: String,
res_body_is_json_schema: { type: Boolean, default: false },
custom_field_value: String,
field2: String,
field3: String,
api_opened: { type: Boolean, default: false },
index: { type: Number, default: 0 },
tag: Array
}
}
save(data) {
let m = new this.model(data)
return m.save()
}
get(id) {
return this.model
.findOne({
_id: id
})
.exec()
}
getBaseinfo(id) {
return this.model
.findOne({
_id: id
})
.select('path method uid title project_id cat_id status ')
.exec()
}
getVar(project_id, method) {
return this.model
.find({
project_id: project_id,
type: 'var',
method: method
})
.select('_id path')
.exec()
}
getByQueryPath(project_id, path, method) {
return this.model
.find({
'project_id': project_id,
'query_path.path': path,
'method': method
})
.exec()
}
getByPath(project_id, path, method, select) {
select =
select ||
'_id title uid path method project_id catid edit_uid status add_time up_time type query_path req_query req_headers req_params req_body_type req_body_form req_body_other res_body_type custom_field_value res_body res_body_is_json_schema req_body_is_json_schema'
return this.model
.find({
project_id: project_id,
path: path,
method: method
})
.select(select)
.exec()
}
checkRepeat(id, path, method) {
return this.model.countDocuments({
project_id: id,
path: path,
method: method
})
}
countByProjectId(id) {
return this.model.countDocuments({
project_id: id
})
}
list(project_id, select) {
select =
select ||
'_id title uid path method project_id catid edit_uid status add_time up_time'
return this.model
.find({
project_id: project_id
})
.select(select)
.sort({ title: 1 })
.exec()
}
listWithPage(project_id, page, limit) {
page = parseInt(page)
limit = parseInt(limit)
return this.model
.find({
project_id: project_id
})
.sort({ title: 1 })
.skip((page - 1) * limit)
.limit(limit)
.select(
'_id title uid path method project_id catid api_opened edit_uid status add_time up_time tag',
)
.exec()
}
listByPid(project_id) {
return this.model
.find({
project_id: project_id
})
.sort({ title: 1 })
.exec()
}
//获取全部接口信息
getInterfaceListCount() {
return this.model.countDocuments({})
}
listByCatid(catid, select) {
select =
select ||
'_id title uid path method project_id catid edit_uid status add_time up_time index tag'
return this.model
.find({
catid: catid
})
.select(select)
.sort({ index: 1 })
.exec()
}
listByCatidWithPage(catid, page, limit) {
page = parseInt(page)
limit = parseInt(limit)
return this.model
.find({
catid: catid
})
.sort({ index: 1 })
.skip((page - 1) * limit)
.limit(limit)
.select(
'_id title uid path method project_id catid edit_uid api_opened status add_time up_time, index, tag',
)
.exec()
}
listByOptionWithPage(option, page, limit) {
page = parseInt(page)
limit = parseInt(limit)
return this.model
.find(option)
.sort({ index: 1 })
.skip((page - 1) * limit)
.limit(limit)
.select(
'_id title uid path method project_id catid edit_uid api_opened status add_time up_time, index, tag',
)
.exec()
}
listByInterStatus(catid, status) {
let option = {}
if (status === 'open') {
option = {
catid: catid,
api_opened: true
}
} else {
option = {
catid: catid
}
}
return this.model.find(option).select().sort({ title: 1 }).exec()
}
del(id) {
return this.model.remove({
_id: id
})
}
delByCatid(id) {
return this.model.remove({
catid: id
})
}
delByProjectId(id) {
return this.model.remove({
project_id: id
})
}
up(id, data) {
data.up_time = yapi.commons.time()
return this.model.update(
{
_id: id
},
data,
{ runValidators: true },
)
}
upEditUid(id, uid) {
return this.model.update(
{
_id: id
},
{ edit_uid: uid },
{ runValidators: true },
)
}
getcustomFieldValue(id, value) {
return this.model
.find({
project_id: id,
custom_field_value: value
})
.select(
'title uid path method edit_uid status desc add_time up_time type query_path req_query req_headers req_params req_body_type req_body_form req_body_other res_body_type custom_field_value',
)
.exec()
}
listCount(option) {
return this.model.countDocuments(option)
}
upIndex(id, index) {
return this.model.update(
{
_id: id
},
{
index: index
},
)
}
search(keyword) {
return this.model
.find({
$or: [
{ title: new RegExp(keyword, 'ig') },
{ path: new RegExp(keyword, 'ig') }
]
})
.limit(10)
}
}
module.exports = interfaceModel