refactor(模型关系): 重构模型关联关系定义位置,从模型文件移至路由文件
This commit is contained in:
@@ -3,13 +3,11 @@ const path = require('path');
|
||||
const fs = require('fs');
|
||||
const router = express.Router();
|
||||
|
||||
// 确保上传目录存在
|
||||
const UPLOAD_DIR = path.join(__dirname, '../uploads');
|
||||
if (!fs.existsSync(UPLOAD_DIR)) {
|
||||
fs.mkdirSync(UPLOAD_DIR, { recursive: true });
|
||||
}
|
||||
|
||||
// 确保背景设置文件存在
|
||||
const SETTINGS_FILE = path.join(__dirname, '../backgroundSettings.json');
|
||||
if (!fs.existsSync(SETTINGS_FILE)) {
|
||||
fs.writeFileSync(SETTINGS_FILE, JSON.stringify({
|
||||
@@ -19,7 +17,33 @@ if (!fs.existsSync(SETTINGS_FILE)) {
|
||||
}, null, 2));
|
||||
}
|
||||
|
||||
// 上传图片接口
|
||||
router.get('/', (req, res) => {
|
||||
try {
|
||||
const settings = JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8'));
|
||||
res.json({
|
||||
success: true,
|
||||
data: settings
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('读取背景设置失败:', error);
|
||||
res.status(500).json({ error: '读取背景设置失败' });
|
||||
}
|
||||
});
|
||||
|
||||
router.put('/', (req, res) => {
|
||||
try {
|
||||
const settings = req.body;
|
||||
fs.writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));
|
||||
res.json({
|
||||
success: true,
|
||||
data: settings
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('保存背景设置失败:', error);
|
||||
res.status(500).json({ error: '保存背景设置失败' });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/upload', (req, res) => {
|
||||
try {
|
||||
if (!req.files || !req.files.file) {
|
||||
@@ -30,14 +54,12 @@ router.post('/upload', (req, res) => {
|
||||
const fileName = `${Date.now()}_${file.name}`;
|
||||
const filePath = path.join(UPLOAD_DIR, fileName);
|
||||
|
||||
// 保存文件到服务器
|
||||
file.mv(filePath, (err) => {
|
||||
if (err) {
|
||||
console.error('文件保存失败:', err);
|
||||
return res.status(500).json({ error: '文件保存失败' });
|
||||
}
|
||||
|
||||
// 返回文件路径
|
||||
const fileUrl = `/uploads/${fileName}`;
|
||||
res.json({ path: fileUrl });
|
||||
});
|
||||
@@ -47,7 +69,6 @@ router.post('/upload', (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 获取背景设置
|
||||
router.get('/settings', (req, res) => {
|
||||
try {
|
||||
const settings = JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8'));
|
||||
@@ -58,7 +79,6 @@ router.get('/settings', (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 保存背景设置
|
||||
router.post('/settings', (req, res) => {
|
||||
try {
|
||||
const settings = req.body;
|
||||
|
||||
@@ -3,6 +3,11 @@ const router = express.Router();
|
||||
const { Op } = require('sequelize');
|
||||
const DevicePort = require('../models/DevicePort');
|
||||
const Device = require('../models/Device');
|
||||
const NetworkCard = require('../models/NetworkCard');
|
||||
|
||||
DevicePort.belongsTo(Device, { foreignKey: 'deviceId', as: 'device' });
|
||||
Device.hasMany(DevicePort, { foreignKey: 'deviceId', as: 'ports' });
|
||||
DevicePort.belongsTo(NetworkCard, { foreignKey: 'nicId', as: 'networkCard' });
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
|
||||
+33
-23
@@ -1,7 +1,7 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { Op } = require('sequelize');
|
||||
const { sequelize, dbDialect } = require('../db'); // Import sequelize and dbDialect for transactions
|
||||
const { sequelize, dbDialect } = require('../db');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const csv = require('csv-parser');
|
||||
@@ -12,9 +12,9 @@ const Rack = require('../models/Rack');
|
||||
const Room = require('../models/Room');
|
||||
const DeviceField = require('../models/DeviceField');
|
||||
const Ticket = require('../models/Ticket');
|
||||
const DevicePort = require('../models/DevicePort'); // Import DevicePort
|
||||
const Cable = require('../models/Cable'); // Import Cable
|
||||
const NetworkCard = require('../models/NetworkCard'); // Import NetworkCard
|
||||
const DevicePort = require('../models/DevicePort');
|
||||
const Cable = require('../models/Cable');
|
||||
const NetworkCard = require('../models/NetworkCard');
|
||||
const { validateBody, validateQuery } = require('../middleware/validation');
|
||||
const {
|
||||
createDeviceSchema,
|
||||
@@ -25,7 +25,9 @@ const {
|
||||
queryDeviceSchema
|
||||
} = require('../validation/deviceSchema');
|
||||
|
||||
// 获取所有设备(支持搜索和筛选)
|
||||
Device.belongsTo(Rack, { foreignKey: 'rackId' });
|
||||
Rack.hasMany(Device, { foreignKey: 'rackId' });
|
||||
|
||||
router.get('/', validateQuery(queryDeviceSchema), async (req, res) => {
|
||||
try {
|
||||
const { keyword, status, type, rackId, page = 1, pageSize = 10 } = req.query;
|
||||
@@ -772,6 +774,16 @@ router.post('/import', async (req, res) => {
|
||||
} catch (error) {
|
||||
await t.rollback();
|
||||
console.error('导入设备数据失败:', error);
|
||||
|
||||
// 清理临时文件
|
||||
try {
|
||||
if (filePath && fs.existsSync(filePath)) {
|
||||
fs.unlinkSync(filePath);
|
||||
}
|
||||
} catch (fileErr) {
|
||||
console.error('删除临时文件失败:', fileErr);
|
||||
}
|
||||
|
||||
res.status(500).json({
|
||||
errors: [{ row: 0, error: error.message || '导入过程中发生未知错误' }]
|
||||
});
|
||||
@@ -1224,7 +1236,22 @@ router.delete('/:deviceId', async (req, res) => {
|
||||
{ where: { deviceId: deviceId }, transaction: t }
|
||||
);
|
||||
|
||||
// 5. 删除设备 (Delete Device)
|
||||
// 5. 更新机柜功率 (必须在删除设备之前)
|
||||
if (device.rackId) {
|
||||
try {
|
||||
const rack = await Rack.findByPk(device.rackId, { transaction: t });
|
||||
if (rack) {
|
||||
await rack.update({
|
||||
currentPower: Math.max(0, rack.currentPower - device.powerConsumption)
|
||||
}, { transaction: t });
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('更新机柜功率失败:', err);
|
||||
throw err; // 重新抛出错误,触发事务回滚
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 删除设备 (Delete Device)
|
||||
await Device.destroy({
|
||||
where: { deviceId: deviceId },
|
||||
transaction: t
|
||||
@@ -1237,23 +1264,6 @@ router.delete('/:deviceId', async (req, res) => {
|
||||
console.log(`已删除 ${deletedCables} 条相关接线`);
|
||||
}
|
||||
|
||||
// 更新机柜功率 (Update Rack power)
|
||||
// 注意:设备已删除,不需要再减去功率?或者需要?
|
||||
// 原逻辑是:rack.currentPower - device.powerConsumption
|
||||
// 既然设备已经物理删除了,机柜的当前功率确实应该减少。
|
||||
if (device.rackId) {
|
||||
try {
|
||||
const rack = await Rack.findByPk(device.rackId);
|
||||
if (rack) {
|
||||
await rack.update({
|
||||
currentPower: Math.max(0, rack.currentPower - device.powerConsumption)
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('更新机柜功率失败:', err);
|
||||
}
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
message: '删除成功',
|
||||
deviceId: deviceId,
|
||||
|
||||
@@ -5,6 +5,10 @@ const NetworkCard = require('../models/NetworkCard');
|
||||
const Device = require('../models/Device');
|
||||
const DevicePort = require('../models/DevicePort');
|
||||
|
||||
NetworkCard.belongsTo(Device, { foreignKey: 'deviceId', as: 'device' });
|
||||
Device.hasMany(NetworkCard, { foreignKey: 'deviceId', as: 'networkCards' });
|
||||
NetworkCard.hasMany(DevicePort, { foreignKey: 'nicId', as: 'ports' });
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const { deviceId } = req.query;
|
||||
|
||||
Reference in New Issue
Block a user