320 lines
7.9 KiB
JavaScript
320 lines
7.9 KiB
JavaScript
/**
|
|
* 备份管理路由
|
|
* @file backup.js
|
|
* @description 处理数据备份和恢复请求
|
|
*/
|
|
const express = require('express');
|
|
const { body } = require('express-validator');
|
|
const { verifyToken, checkRole } = require('../middleware/auth');
|
|
const backupController = require('../controllers/backupController');
|
|
|
|
const router = express.Router();
|
|
|
|
/**
|
|
* @swagger
|
|
* tags:
|
|
* name: Backup
|
|
* description: 数据备份管理相关接口
|
|
*/
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/create:
|
|
* post:
|
|
* summary: 创建数据备份
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* requestBody:
|
|
* required: false
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* type: object
|
|
* properties:
|
|
* type:
|
|
* type: string
|
|
* enum: [full, daily, weekly, monthly]
|
|
* description: 备份类型
|
|
* default: full
|
|
* description:
|
|
* type: string
|
|
* description: 备份描述
|
|
* responses:
|
|
* 200:
|
|
* description: 备份创建成功
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* $ref: '#/components/schemas/ApiResponse'
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
* 500:
|
|
* description: 服务器错误
|
|
*/
|
|
router.post('/create',
|
|
verifyToken,
|
|
checkRole(['admin']),
|
|
[
|
|
body('type').optional().isIn(['full', 'daily', 'weekly', 'monthly']).withMessage('备份类型无效'),
|
|
body('description').optional().isLength({ max: 255 }).withMessage('描述长度不能超过255字符')
|
|
],
|
|
backupController.createBackup
|
|
);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/list:
|
|
* get:
|
|
* summary: 获取备份列表
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: query
|
|
* name: page
|
|
* schema:
|
|
* type: integer
|
|
* default: 1
|
|
* description: 页码
|
|
* - in: query
|
|
* name: limit
|
|
* schema:
|
|
* type: integer
|
|
* default: 10
|
|
* description: 每页数量
|
|
* - in: query
|
|
* name: type
|
|
* schema:
|
|
* type: string
|
|
* enum: [full, daily, weekly, monthly]
|
|
* description: 备份类型过滤
|
|
* responses:
|
|
* 200:
|
|
* description: 获取成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.get('/list', verifyToken, checkRole(['admin']), backupController.getBackupList);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/stats:
|
|
* get:
|
|
* summary: 获取备份统计信息
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* responses:
|
|
* 200:
|
|
* description: 获取成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.get('/stats', verifyToken, checkRole(['admin']), backupController.getBackupStats);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/health:
|
|
* get:
|
|
* summary: 获取备份系统健康状态
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* responses:
|
|
* 200:
|
|
* description: 获取成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.get('/health', verifyToken, checkRole(['admin']), backupController.getBackupHealth);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/{id}:
|
|
* delete:
|
|
* summary: 删除备份
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* schema:
|
|
* type: string
|
|
* description: 备份ID
|
|
* responses:
|
|
* 200:
|
|
* description: 删除成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
* 404:
|
|
* description: 备份不存在
|
|
*/
|
|
router.delete('/:id', verifyToken, checkRole(['admin']), backupController.deleteBackup);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/{id}/restore:
|
|
* post:
|
|
* summary: 恢复数据备份
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* schema:
|
|
* type: string
|
|
* description: 备份ID
|
|
* requestBody:
|
|
* required: true
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* type: object
|
|
* required:
|
|
* - confirm
|
|
* properties:
|
|
* confirm:
|
|
* type: boolean
|
|
* description: 确认恢复操作
|
|
* responses:
|
|
* 200:
|
|
* description: 恢复成功
|
|
* 400:
|
|
* description: 参数错误
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
* 500:
|
|
* description: 恢复失败
|
|
*/
|
|
router.post('/:id/restore',
|
|
verifyToken,
|
|
checkRole(['admin']),
|
|
[
|
|
body('confirm').isBoolean().withMessage('confirm必须是布尔值')
|
|
],
|
|
backupController.restoreBackup
|
|
);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/{id}/download:
|
|
* get:
|
|
* summary: 下载备份文件
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* schema:
|
|
* type: string
|
|
* description: 备份ID
|
|
* responses:
|
|
* 200:
|
|
* description: 文件下载
|
|
* content:
|
|
* application/zip:
|
|
* schema:
|
|
* type: string
|
|
* format: binary
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
* 404:
|
|
* description: 备份文件不存在
|
|
*/
|
|
router.get('/:id/download', verifyToken, checkRole(['admin']), backupController.downloadBackup);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/cleanup:
|
|
* post:
|
|
* summary: 清理过期备份
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* responses:
|
|
* 200:
|
|
* description: 清理成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.post('/cleanup', verifyToken, checkRole(['admin']), backupController.cleanupBackups);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/schedule/start:
|
|
* post:
|
|
* summary: 启动自动备份调度
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* responses:
|
|
* 200:
|
|
* description: 启动成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.post('/schedule/start', verifyToken, checkRole(['admin']), backupController.startScheduler);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/schedule/stop:
|
|
* post:
|
|
* summary: 停止自动备份调度
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* responses:
|
|
* 200:
|
|
* description: 停止成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.post('/schedule/stop', verifyToken, checkRole(['admin']), backupController.stopScheduler);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/backup/schedule/status:
|
|
* get:
|
|
* summary: 获取自动备份调度状态
|
|
* tags: [Backup]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* responses:
|
|
* 200:
|
|
* description: 获取成功
|
|
* 401:
|
|
* description: 未授权
|
|
* 403:
|
|
* description: 权限不足
|
|
*/
|
|
router.get('/schedule/status', verifyToken, checkRole(['admin']), backupController.getSchedulerStatus);
|
|
|
|
module.exports = router;
|