2026-03-31 14:44:25 +08:00
|
|
|
const { sequelize, dbDialect } = require('../db');
|
|
|
|
|
|
|
|
|
|
async function getTableColumns(tableName) {
|
|
|
|
|
if (dbDialect === 'sqlite') {
|
|
|
|
|
const results = await sequelize.query(`PRAGMA table_info(${tableName})`, {
|
|
|
|
|
type: sequelize.QueryTypes.SELECT,
|
|
|
|
|
});
|
|
|
|
|
return results.map(row => row.name);
|
|
|
|
|
} else {
|
|
|
|
|
const results = await sequelize.query(`SHOW COLUMNS FROM ${tableName}`, {
|
|
|
|
|
type: sequelize.QueryTypes.SELECT,
|
|
|
|
|
});
|
|
|
|
|
return results.map(row => row.Field);
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-31 14:34:34 +08:00
|
|
|
|
|
|
|
|
async function migrateCableFields() {
|
2026-03-31 14:44:25 +08:00
|
|
|
const tableName = 'cables';
|
2026-03-31 14:34:34 +08:00
|
|
|
|
2026-03-31 14:44:25 +08:00
|
|
|
try {
|
|
|
|
|
console.log(`开始迁移 ${tableName} 表新字段...`);
|
|
|
|
|
|
|
|
|
|
const existingColumns = await getTableColumns(tableName);
|
2026-03-31 14:34:34 +08:00
|
|
|
|
|
|
|
|
const newColumns = [
|
|
|
|
|
{ name: 'cableLabel', type: 'VARCHAR(255)' },
|
|
|
|
|
{ name: 'cableColor', type: 'VARCHAR(50)' },
|
|
|
|
|
{ name: 'installedBy', type: 'VARCHAR(100)' },
|
|
|
|
|
{ name: 'installedAt', type: 'DATETIME' },
|
|
|
|
|
{ name: 'lastTestedAt', type: 'DATETIME' },
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
for (const column of newColumns) {
|
|
|
|
|
if (!existingColumns.includes(column.name)) {
|
2026-03-31 14:44:25 +08:00
|
|
|
if (dbDialect === 'sqlite') {
|
|
|
|
|
await sequelize.query(`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.type}`);
|
|
|
|
|
} else {
|
|
|
|
|
await sequelize.query(`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.type}`);
|
|
|
|
|
}
|
|
|
|
|
console.log(` ✓ 添加字段: ${column.name}`);
|
2026-03-31 14:34:34 +08:00
|
|
|
} else {
|
2026-03-31 14:44:25 +08:00
|
|
|
console.log(` → 字段已存在: ${column.name}`);
|
2026-03-31 14:34:34 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 14:44:25 +08:00
|
|
|
console.log(` ✓ ${tableName} 表字段迁移完成`);
|
2026-03-31 14:34:34 +08:00
|
|
|
} catch (error) {
|
2026-03-31 14:44:25 +08:00
|
|
|
console.error(` ✗ 迁移失败: ${error.message}`);
|
|
|
|
|
throw error;
|
2026-03-31 14:34:34 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 14:44:25 +08:00
|
|
|
if (require.main === module) {
|
|
|
|
|
migrateCableFields()
|
|
|
|
|
.then(() => {
|
|
|
|
|
console.log('迁移完成!');
|
|
|
|
|
process.exit(0);
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
console.error('迁移执行失败:', err);
|
|
|
|
|
process.exit(1);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = { migrateCableFields };
|