完善保险端前后端和养殖端小程序
This commit is contained in:
369
backend/swagger-config.js
Normal file
369
backend/swagger-config.js
Normal file
@@ -0,0 +1,369 @@
|
||||
/**
|
||||
* Swagger API文档配置
|
||||
* @file swagger-config.js
|
||||
* @description 配置Swagger API文档,包含智能耳标预警和智能项圈预警接口
|
||||
*/
|
||||
|
||||
const swaggerJSDoc = require('swagger-jsdoc');
|
||||
|
||||
const options = {
|
||||
definition: {
|
||||
openapi: '3.0.0',
|
||||
info: {
|
||||
title: '智能预警系统 API',
|
||||
version: '1.0.0',
|
||||
description: '智能耳标预警和智能项圈预警系统API文档',
|
||||
contact: {
|
||||
name: '开发团队',
|
||||
email: 'dev@example.com'
|
||||
}
|
||||
},
|
||||
servers: [
|
||||
{
|
||||
url: 'http://localhost:5350/api',
|
||||
description: '开发环境'
|
||||
}
|
||||
],
|
||||
tags: [
|
||||
{
|
||||
name: '智能耳标预警',
|
||||
description: '智能耳标预警相关接口'
|
||||
},
|
||||
{
|
||||
name: '智能项圈预警',
|
||||
description: '智能项圈预警相关接口'
|
||||
}
|
||||
],
|
||||
components: {
|
||||
schemas: {
|
||||
EartagAlert: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
description: '预警ID',
|
||||
example: '123_offline'
|
||||
},
|
||||
deviceId: {
|
||||
type: 'integer',
|
||||
description: '设备ID',
|
||||
example: 123
|
||||
},
|
||||
deviceName: {
|
||||
type: 'string',
|
||||
description: '设备名称',
|
||||
example: 'EARTAG001'
|
||||
},
|
||||
eartagNumber: {
|
||||
type: 'string',
|
||||
description: '耳标编号',
|
||||
example: 'EARTAG001'
|
||||
},
|
||||
alertType: {
|
||||
type: 'string',
|
||||
description: '预警类型',
|
||||
enum: ['battery', 'offline', 'temperature', 'movement'],
|
||||
example: 'offline'
|
||||
},
|
||||
alertLevel: {
|
||||
type: 'string',
|
||||
description: '预警级别',
|
||||
enum: ['high', 'medium', 'low'],
|
||||
example: 'high'
|
||||
},
|
||||
alertTime: {
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
description: '预警时间',
|
||||
example: '2024-01-15 10:30:00'
|
||||
},
|
||||
battery: {
|
||||
type: 'integer',
|
||||
description: '设备电量',
|
||||
example: 85
|
||||
},
|
||||
temperature: {
|
||||
type: 'number',
|
||||
description: '设备温度',
|
||||
example: 25.5
|
||||
},
|
||||
dailySteps: {
|
||||
type: 'integer',
|
||||
description: '当日步数',
|
||||
example: 0
|
||||
},
|
||||
totalSteps: {
|
||||
type: 'integer',
|
||||
description: '总步数',
|
||||
example: 1500
|
||||
},
|
||||
yesterdaySteps: {
|
||||
type: 'integer',
|
||||
description: '昨日步数',
|
||||
example: 1500
|
||||
},
|
||||
deviceStatus: {
|
||||
type: 'string',
|
||||
description: '设备状态',
|
||||
example: '离线'
|
||||
},
|
||||
gpsSignal: {
|
||||
type: 'string',
|
||||
description: 'GPS信号',
|
||||
example: '无'
|
||||
},
|
||||
movementStatus: {
|
||||
type: 'string',
|
||||
description: '运动状态',
|
||||
example: '静止'
|
||||
},
|
||||
description: {
|
||||
type: 'string',
|
||||
description: '预警描述',
|
||||
example: '设备已离线超过30分钟'
|
||||
},
|
||||
longitude: {
|
||||
type: 'number',
|
||||
description: '经度',
|
||||
example: 116.3974
|
||||
},
|
||||
latitude: {
|
||||
type: 'number',
|
||||
description: '纬度',
|
||||
example: 39.9093
|
||||
}
|
||||
}
|
||||
},
|
||||
CollarAlert: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string',
|
||||
description: '预警ID',
|
||||
example: '123_offline'
|
||||
},
|
||||
deviceId: {
|
||||
type: 'integer',
|
||||
description: '设备ID',
|
||||
example: 123
|
||||
},
|
||||
deviceName: {
|
||||
type: 'string',
|
||||
description: '设备名称',
|
||||
example: 'COLLAR001'
|
||||
},
|
||||
collarNumber: {
|
||||
type: 'string',
|
||||
description: '项圈编号',
|
||||
example: 'COLLAR001'
|
||||
},
|
||||
alertType: {
|
||||
type: 'string',
|
||||
description: '预警类型',
|
||||
enum: ['battery', 'offline', 'temperature', 'movement', 'wear'],
|
||||
example: 'offline'
|
||||
},
|
||||
alertLevel: {
|
||||
type: 'string',
|
||||
description: '预警级别',
|
||||
enum: ['high', 'medium', 'low'],
|
||||
example: 'high'
|
||||
},
|
||||
alertTime: {
|
||||
type: 'string',
|
||||
format: 'date-time',
|
||||
description: '预警时间',
|
||||
example: '2024-01-15 10:30:00'
|
||||
},
|
||||
battery: {
|
||||
type: 'integer',
|
||||
description: '设备电量',
|
||||
example: 85
|
||||
},
|
||||
temperature: {
|
||||
type: 'number',
|
||||
description: '设备温度',
|
||||
example: 25.5
|
||||
},
|
||||
dailySteps: {
|
||||
type: 'integer',
|
||||
description: '当日步数',
|
||||
example: 0
|
||||
},
|
||||
totalSteps: {
|
||||
type: 'integer',
|
||||
description: '总步数',
|
||||
example: 1500
|
||||
},
|
||||
yesterdaySteps: {
|
||||
type: 'integer',
|
||||
description: '昨日步数',
|
||||
example: 1500
|
||||
},
|
||||
deviceStatus: {
|
||||
type: 'string',
|
||||
description: '设备状态',
|
||||
example: '离线'
|
||||
},
|
||||
gpsSignal: {
|
||||
type: 'string',
|
||||
description: 'GPS信号',
|
||||
example: '无'
|
||||
},
|
||||
wearStatus: {
|
||||
type: 'string',
|
||||
description: '佩戴状态',
|
||||
example: '未佩戴'
|
||||
},
|
||||
movementStatus: {
|
||||
type: 'string',
|
||||
description: '运动状态',
|
||||
example: '静止'
|
||||
},
|
||||
description: {
|
||||
type: 'string',
|
||||
description: '预警描述',
|
||||
example: '设备已离线超过30分钟'
|
||||
},
|
||||
longitude: {
|
||||
type: 'number',
|
||||
description: '经度',
|
||||
example: 116.3974
|
||||
},
|
||||
latitude: {
|
||||
type: 'number',
|
||||
description: '纬度',
|
||||
example: 39.9093
|
||||
}
|
||||
}
|
||||
},
|
||||
AlertStats: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
totalDevices: {
|
||||
type: 'integer',
|
||||
description: '设备总数',
|
||||
example: 150
|
||||
},
|
||||
lowBattery: {
|
||||
type: 'integer',
|
||||
description: '低电量预警数量',
|
||||
example: 12
|
||||
},
|
||||
offline: {
|
||||
type: 'integer',
|
||||
description: '离线预警数量',
|
||||
example: 8
|
||||
},
|
||||
highTemperature: {
|
||||
type: 'integer',
|
||||
description: '高温预警数量',
|
||||
example: 5
|
||||
},
|
||||
lowTemperature: {
|
||||
type: 'integer',
|
||||
description: '低温预警数量',
|
||||
example: 3
|
||||
},
|
||||
abnormalMovement: {
|
||||
type: 'integer',
|
||||
description: '异常运动预警数量',
|
||||
example: 7
|
||||
},
|
||||
wearOff: {
|
||||
type: 'integer',
|
||||
description: '项圈脱落预警数量(仅项圈)',
|
||||
example: 2
|
||||
},
|
||||
totalAlerts: {
|
||||
type: 'integer',
|
||||
description: '预警总数',
|
||||
example: 35
|
||||
}
|
||||
}
|
||||
},
|
||||
ApiResponse: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
success: {
|
||||
type: 'boolean',
|
||||
description: '请求是否成功',
|
||||
example: true
|
||||
},
|
||||
data: {
|
||||
type: 'object',
|
||||
description: '响应数据'
|
||||
},
|
||||
message: {
|
||||
type: 'string',
|
||||
description: '响应消息',
|
||||
example: '操作成功'
|
||||
},
|
||||
total: {
|
||||
type: 'integer',
|
||||
description: '数据总数(分页时使用)',
|
||||
example: 100
|
||||
},
|
||||
stats: {
|
||||
$ref: '#/components/schemas/AlertStats'
|
||||
},
|
||||
pagination: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
page: {
|
||||
type: 'integer',
|
||||
description: '当前页码',
|
||||
example: 1
|
||||
},
|
||||
limit: {
|
||||
type: 'integer',
|
||||
description: '每页数量',
|
||||
example: 10
|
||||
},
|
||||
total: {
|
||||
type: 'integer',
|
||||
description: '总数据量',
|
||||
example: 100
|
||||
},
|
||||
pages: {
|
||||
type: 'integer',
|
||||
description: '总页数',
|
||||
example: 10
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
ErrorResponse: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
success: {
|
||||
type: 'boolean',
|
||||
description: '请求是否成功',
|
||||
example: false
|
||||
},
|
||||
message: {
|
||||
type: 'string',
|
||||
description: '错误消息',
|
||||
example: '请求失败'
|
||||
},
|
||||
error: {
|
||||
type: 'string',
|
||||
description: '详细错误信息',
|
||||
example: '具体错误描述'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
apis: [
|
||||
'./routes/smart-alerts.js',
|
||||
'./controllers/smartEartagAlertController.js',
|
||||
'./controllers/smartCollarAlertController.js'
|
||||
]
|
||||
};
|
||||
|
||||
const specs = swaggerJSDoc(options);
|
||||
|
||||
module.exports = specs;
|
||||
Reference in New Issue
Block a user