Files
nxxmdata/backend/config/swagger.js
2025-09-12 20:08:42 +08:00

654 lines
17 KiB
JavaScript
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 swaggerJsdoc = require('swagger-jsdoc');
const options = {
definition: {
openapi: '3.0.0',
info: {
title: '宁夏智慧养殖监管平台 API',
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'
}
}
},
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;