366 lines
9.9 KiB
JavaScript
366 lines
9.9 KiB
JavaScript
|
|
/**
|
|||
|
|
* 设备路由
|
|||
|
|
* @file devices.js
|
|||
|
|
* @description 定义设备相关的API路由
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
const express = require('express');
|
|||
|
|
const router = express.Router();
|
|||
|
|
const deviceController = require('../controllers/deviceController');
|
|||
|
|
const { verifyToken } = require('../middleware/auth');
|
|||
|
|
|
|||
|
|
// 公开API路由,不需要验证token
|
|||
|
|
const publicRoutes = express.Router();
|
|||
|
|
router.use('/public', publicRoutes);
|
|||
|
|
|
|||
|
|
// 公开创建设备接口
|
|||
|
|
publicRoutes.post('/', deviceController.createDevice);
|
|||
|
|
|
|||
|
|
// 公开获取单个设备接口
|
|||
|
|
publicRoutes.get('/:id', deviceController.getDeviceById);
|
|||
|
|
|
|||
|
|
// 公开更新设备接口
|
|||
|
|
publicRoutes.put('/:id', deviceController.updateDevice);
|
|||
|
|
|
|||
|
|
// 公开删除设备接口
|
|||
|
|
publicRoutes.delete('/:id', deviceController.deleteDevice);
|
|||
|
|
|
|||
|
|
// 公开获取设备状态统计接口
|
|||
|
|
publicRoutes.get('/stats/status', deviceController.getDeviceStatsByStatus);
|
|||
|
|
|
|||
|
|
// 公开获取设备类型统计接口
|
|||
|
|
publicRoutes.get('/stats/type', deviceController.getDeviceStatsByType);
|
|||
|
|
|
|||
|
|
// 公开获取所有设备数据
|
|||
|
|
publicRoutes.get('/', deviceController.getAllDevices);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* tags:
|
|||
|
|
* name: Devices
|
|||
|
|
* description: 设备管理API
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices:
|
|||
|
|
* get:
|
|||
|
|
* summary: 获取所有设备
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 成功获取设备列表
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* data:
|
|||
|
|
* type: array
|
|||
|
|
* items:
|
|||
|
|
* $ref: '#/components/schemas/Device'
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/', verifyToken, deviceController.getAllDevices);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices/{id}:
|
|||
|
|
* get:
|
|||
|
|
* summary: 获取单个设备
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: path
|
|||
|
|
* name: id
|
|||
|
|
* schema:
|
|||
|
|
* type: integer
|
|||
|
|
* required: true
|
|||
|
|
* description: 设备ID
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 成功获取设备详情
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* data:
|
|||
|
|
* $ref: '#/components/schemas/Device'
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 404:
|
|||
|
|
* description: 设备不存在
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/:id', verifyToken, deviceController.getDeviceById);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices:
|
|||
|
|
* post:
|
|||
|
|
* summary: 创建设备
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* requestBody:
|
|||
|
|
* required: true
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* required:
|
|||
|
|
* - name
|
|||
|
|
* - type
|
|||
|
|
* - farmId
|
|||
|
|
* properties:
|
|||
|
|
* 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: 设备指标数据
|
|||
|
|
* responses:
|
|||
|
|
* 201:
|
|||
|
|
* description: 设备创建成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* message:
|
|||
|
|
* type: string
|
|||
|
|
* example: 设备创建成功
|
|||
|
|
* data:
|
|||
|
|
* $ref: '#/components/schemas/Device'
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 404:
|
|||
|
|
* description: 养殖场不存在
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.post('/', verifyToken, deviceController.createDevice);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices/{id}:
|
|||
|
|
* put:
|
|||
|
|
* summary: 更新设备
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: path
|
|||
|
|
* name: id
|
|||
|
|
* schema:
|
|||
|
|
* type: integer
|
|||
|
|
* required: true
|
|||
|
|
* description: 设备ID
|
|||
|
|
* requestBody:
|
|||
|
|
* required: true
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* 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: 设备指标数据
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 设备更新成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* message:
|
|||
|
|
* type: string
|
|||
|
|
* example: 设备更新成功
|
|||
|
|
* data:
|
|||
|
|
* $ref: '#/components/schemas/Device'
|
|||
|
|
* 400:
|
|||
|
|
* description: 请求参数错误
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 404:
|
|||
|
|
* description: 设备不存在或养殖场不存在
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.put('/:id', verifyToken, deviceController.updateDevice);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices/{id}:
|
|||
|
|
* delete:
|
|||
|
|
* summary: 删除设备
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* parameters:
|
|||
|
|
* - in: path
|
|||
|
|
* name: id
|
|||
|
|
* schema:
|
|||
|
|
* type: integer
|
|||
|
|
* required: true
|
|||
|
|
* description: 设备ID
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 设备删除成功
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* message:
|
|||
|
|
* type: string
|
|||
|
|
* example: 设备删除成功
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 404:
|
|||
|
|
* description: 设备不存在
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.delete('/:id', verifyToken, deviceController.deleteDevice);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices/stats/status:
|
|||
|
|
* get:
|
|||
|
|
* summary: 按状态统计设备数量
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 成功获取设备状态统计
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* data:
|
|||
|
|
* type: array
|
|||
|
|
* items:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* status:
|
|||
|
|
* type: string
|
|||
|
|
* example: online
|
|||
|
|
* count:
|
|||
|
|
* type: integer
|
|||
|
|
* example: 25
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/stats/status', verifyToken, deviceController.getDeviceStatsByStatus);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @swagger
|
|||
|
|
* /api/devices/stats/type:
|
|||
|
|
* get:
|
|||
|
|
* summary: 按类型统计设备数量
|
|||
|
|
* tags: [Devices]
|
|||
|
|
* security:
|
|||
|
|
* - bearerAuth: []
|
|||
|
|
* responses:
|
|||
|
|
* 200:
|
|||
|
|
* description: 成功获取设备类型统计
|
|||
|
|
* content:
|
|||
|
|
* application/json:
|
|||
|
|
* schema:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* success:
|
|||
|
|
* type: boolean
|
|||
|
|
* example: true
|
|||
|
|
* data:
|
|||
|
|
* type: array
|
|||
|
|
* items:
|
|||
|
|
* type: object
|
|||
|
|
* properties:
|
|||
|
|
* type:
|
|||
|
|
* type: string
|
|||
|
|
* example: 温度传感器
|
|||
|
|
* count:
|
|||
|
|
* type: integer
|
|||
|
|
* example: 15
|
|||
|
|
* 401:
|
|||
|
|
* description: 未授权
|
|||
|
|
* 500:
|
|||
|
|
* description: 服务器错误
|
|||
|
|
*/
|
|||
|
|
router.get('/stats/type', verifyToken, deviceController.getDeviceStatsByType);
|
|||
|
|
|
|||
|
|
module.exports = router;
|