Files
nxxmdata/backend/config/swagger.js

654 lines
17 KiB
JavaScript
Raw Normal View History

const swaggerJsdoc = require('swagger-jsdoc');
const options = {
definition: {
openapi: '3.0.0',
info: {
title: '宁夏智慧养殖监管平台 API',
2025-09-12 20:08:42 +08:00
version: '2.1.0',
description: `
## 宁夏智慧养殖监管平台 API 文档
### 概述
本文档提供了智慧养殖监管平台的完整API接口说明包括
- **核心功能**: 农场管理动物管理设备监控预警管理
- **业务功能**: 产品管理订单管理报表生成
- **系统功能**: 用户管理权限控制系统配置
### 认证机制
- 采用JWT (JSON Web Token) 进行身份认证
- 所有API请求需在Header中携带Authorization字段
- 格式: \`Authorization: Bearer <token>\`
### 响应格式
所有API响应均采用统一格式
\`\`\`json
{
"success": true,
"data": {},
"message": "操作成功",
"timestamp": "2025-01-18T10:30:00Z"
}
\`\`\`
### 错误处理
- HTTP状态码遵循RESTful标准
- 详细错误信息在响应体中提供
- 支持多语言错误消息
### 版本信息
- **当前版本**: v2.1.0
- **最后更新**: 2025-01-18
- **维护状态**: 积极维护中
`,
contact: {
name: '技术支持',
email: 'support@nxxm.com',
url: 'https://github.com/nxxm-platform'
},
license: {
name: 'MIT',
url: 'https://opensource.org/licenses/MIT'
}
},
servers: [
{
url: 'http://localhost:5350',
description: '开发服务器',
},
],
components: {
securitySchemes: {
bearerAuth: {
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT',
}
},
schemas: {
MapGeocode: {
type: 'object',
properties: {
address: {
type: 'string',
description: '地址'
},
result: {
type: 'object',
properties: {
location: {
type: 'object',
properties: {
lng: {
type: 'number',
description: '经度'
},
lat: {
type: 'number',
description: '纬度'
}
}
}
}
}
}
},
MapReverseGeocode: {
type: 'object',
properties: {
lat: {
type: 'number',
description: '纬度'
},
lng: {
type: 'number',
description: '经度'
},
result: {
type: 'object',
properties: {
formatted_address: {
type: 'string',
description: '结构化地址'
},
addressComponent: {
type: 'object',
description: '地址组成部分'
}
}
}
}
},
MapDirection: {
type: 'object',
properties: {
origin: {
type: 'string',
description: '起点坐标,格式:纬度,经度'
},
destination: {
type: 'string',
description: '终点坐标,格式:纬度,经度'
},
mode: {
type: 'string',
enum: ['driving', 'walking', 'riding', 'transit'],
description: '交通方式'
}
}
},
Farm: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '养殖场ID'
},
name: {
type: 'string',
description: '养殖场名称'
},
type: {
type: 'string',
description: '养殖场类型'
},
location: {
type: 'object',
properties: {
latitude: {
type: 'number',
format: 'float',
description: '纬度'
},
longitude: {
type: 'number',
format: 'float',
description: '经度'
}
},
description: '地理位置'
},
address: {
type: 'string',
description: '详细地址'
},
contact: {
type: 'string',
description: '联系人'
},
phone: {
type: 'string',
description: '联系电话'
},
status: {
type: 'string',
enum: ['active', 'inactive', 'maintenance'],
description: '养殖场状态'
},
createdAt: {
type: 'string',
format: 'date-time',
description: '创建时间'
},
updatedAt: {
type: 'string',
format: 'date-time',
description: '更新时间'
}
}
},
Animal: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '动物ID'
},
type: {
type: 'string',
description: '动物类型'
},
count: {
type: 'integer',
description: '数量'
},
farmId: {
type: 'integer',
description: '所属养殖场ID'
},
health_status: {
type: 'string',
enum: ['healthy', 'sick', 'quarantined'],
description: '健康状态'
},
last_check_time: {
type: 'string',
format: 'date-time',
description: '上次检查时间'
},
notes: {
type: 'string',
description: '备注'
},
createdAt: {
type: 'string',
format: 'date-time',
description: '创建时间'
},
updatedAt: {
type: 'string',
format: 'date-time',
description: '更新时间'
}
}
},
Device: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '设备ID'
},
name: {
type: 'string',
description: '设备名称'
},
type: {
type: 'string',
description: '设备类型'
},
status: {
type: 'string',
enum: ['online', 'offline', 'maintenance'],
description: '设备状态'
},
farmId: {
type: 'integer',
description: '所属养殖场ID'
},
last_maintenance: {
type: 'string',
format: 'date-time',
description: '上次维护时间'
},
installation_date: {
type: 'string',
format: 'date-time',
description: '安装日期'
},
metrics: {
type: 'object',
description: '设备指标'
},
createdAt: {
type: 'string',
format: 'date-time',
description: '创建时间'
},
updatedAt: {
type: 'string',
format: 'date-time',
description: '更新时间'
}
}
},
Alert: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '预警ID'
},
type: {
type: 'string',
description: '预警类型'
},
level: {
type: 'string',
enum: ['low', 'medium', 'high', 'critical'],
description: '预警级别'
},
message: {
type: 'string',
description: '预警消息'
},
status: {
type: 'string',
enum: ['active', 'acknowledged', 'resolved'],
description: '预警状态'
},
farmId: {
type: 'integer',
description: '所属养殖场ID'
},
deviceId: {
type: 'integer',
description: '关联设备ID'
},
resolved_at: {
type: 'string',
format: 'date-time',
description: '解决时间'
},
resolved_by: {
type: 'integer',
description: '解决人ID'
},
resolution_notes: {
type: 'string',
description: '解决备注'
},
createdAt: {
type: 'string',
format: 'date-time',
description: '创建时间'
},
updatedAt: {
type: 'string',
format: 'date-time',
description: '更新时间'
}
}
},
FarmInput: {
type: 'object',
required: ['name', 'type', 'location'],
properties: {
name: {
type: 'string',
description: '养殖场名称'
},
type: {
type: 'string',
description: '养殖场类型'
},
location: {
type: 'object',
required: ['latitude', 'longitude'],
properties: {
latitude: {
type: 'number',
format: 'float',
description: '纬度'
},
longitude: {
type: 'number',
format: 'float',
description: '经度'
}
},
description: '地理位置'
},
address: {
type: 'string',
description: '详细地址'
},
contact: {
type: 'string',
description: '联系人'
},
phone: {
type: 'string',
description: '联系电话'
},
status: {
type: 'string',
enum: ['active', 'inactive', 'maintenance'],
description: '养殖场状态',
default: 'active'
}
}
2025-09-12 20:08:42 +08:00
},
User: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '用户ID'
},
username: {
type: 'string',
description: '用户名'
},
email: {
type: 'string',
format: 'email',
description: '邮箱地址'
},
roles: {
type: 'integer',
description: '角色ID'
},
status: {
type: 'string',
enum: ['active', 'inactive'],
description: '用户状态'
},
last_login: {
type: 'string',
format: 'date-time',
description: '最后登录时间'
}
}
},
Product: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '产品ID'
},
name: {
type: 'string',
description: '产品名称'
},
description: {
type: 'string',
description: '产品描述'
},
price: {
type: 'number',
format: 'decimal',
description: '产品价格'
},
stock: {
type: 'integer',
description: '库存数量'
},
status: {
type: 'string',
enum: ['active', 'inactive'],
description: '产品状态'
}
}
},
Order: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '订单ID'
},
user_id: {
type: 'integer',
description: '用户ID'
},
total_amount: {
type: 'number',
format: 'decimal',
description: '订单总金额'
},
status: {
type: 'string',
enum: ['pending', 'processing', 'shipped', 'delivered', 'cancelled'],
description: '订单状态'
},
payment_status: {
type: 'string',
enum: ['unpaid', 'paid', 'refunded'],
description: '支付状态'
},
shipping_address: {
type: 'string',
description: '收货地址'
}
}
},
SystemConfig: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '配置ID'
},
config_key: {
type: 'string',
description: '配置键名'
},
config_value: {
type: 'string',
description: '配置值'
},
config_type: {
type: 'string',
enum: ['string', 'number', 'boolean', 'json', 'array'],
description: '配置类型'
},
category: {
type: 'string',
description: '配置分类'
},
description: {
type: 'string',
description: '配置描述'
},
is_public: {
type: 'boolean',
description: '是否公开'
},
is_editable: {
type: 'boolean',
description: '是否可编辑'
}
}
},
MenuPermission: {
type: 'object',
properties: {
id: {
type: 'integer',
description: '菜单ID'
},
menu_key: {
type: 'string',
description: '菜单标识'
},
menu_name: {
type: 'string',
description: '菜单名称'
},
menu_path: {
type: 'string',
description: '菜单路径'
},
parent_id: {
type: 'integer',
description: '父菜单ID'
},
menu_type: {
type: 'string',
enum: ['page', 'button', 'api'],
description: '菜单类型'
},
required_roles: {
type: 'array',
items: {
type: 'string'
},
description: '所需角色'
},
icon: {
type: 'string',
description: '菜单图标'
},
sort_order: {
type: 'integer',
description: '排序顺序'
},
is_visible: {
type: 'boolean',
description: '是否可见'
},
is_enabled: {
type: 'boolean',
description: '是否启用'
}
}
},
ApiResponse: {
type: 'object',
properties: {
success: {
type: 'boolean',
description: '操作是否成功'
},
data: {
description: '响应数据'
},
message: {
type: 'string',
description: '响应消息'
},
timestamp: {
type: 'string',
format: 'date-time',
description: '响应时间'
}
}
},
ErrorResponse: {
type: 'object',
properties: {
success: {
type: 'boolean',
example: false
},
message: {
type: 'string',
description: '错误消息'
},
error: {
type: 'string',
description: '错误详情'
},
errors: {
type: 'array',
items: {
type: 'object',
properties: {
field: {
type: 'string',
description: '错误字段'
},
message: {
type: 'string',
description: '错误消息'
}
}
},
description: '详细错误列表'
}
}
}
}
},
security: [{
bearerAuth: []
}]
},
apis: ['./routes/*.js'], // 指定包含 API 注释的文件路径
};
const specs = swaggerJsdoc(options);
module.exports = specs;