style(backend): 格式化模型文件代码 style(frontend): 调整组件代码格式 chore: 删除旧 ESLint 配置并添加新配置 refactor(backend): 重构模型定义语法 style: 统一箭头函数和对象属性简写
92 lines
2.9 KiB
JavaScript
92 lines
2.9 KiB
JavaScript
/**
|
|
* 耗材管理乐观锁迁移脚本
|
|
* 为 consumables 表添加 version 字段
|
|
*/
|
|
|
|
require('dotenv').config();
|
|
const { sequelize, dbDialect } = require('../db');
|
|
|
|
// 从环境变量重新确定数据库类型
|
|
const actualDbType = process.env.DB_TYPE || 'sqlite';
|
|
|
|
async function migrate() {
|
|
try {
|
|
console.log('开始执行耗材乐观锁迁移...');
|
|
console.log('数据库类型:', actualDbType);
|
|
|
|
if (actualDbType === 'sqlite') {
|
|
// SQLite: 检查字段是否存在
|
|
const tableInfo = await sequelize.query('PRAGMA table_info(consumables)', {
|
|
type: sequelize.QueryTypes.SELECT,
|
|
});
|
|
|
|
const hasVersion = tableInfo.some(col => col.name === 'version');
|
|
|
|
if (!hasVersion) {
|
|
console.log('添加 version 字段...');
|
|
await sequelize.query('ALTER TABLE consumables ADD COLUMN version INTEGER DEFAULT 0');
|
|
console.log('version 字段添加成功');
|
|
} else {
|
|
console.log('version 字段已存在,跳过');
|
|
}
|
|
|
|
// 检查 updatedAt 索引
|
|
const indexes = await sequelize.query(
|
|
"SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='consumables'",
|
|
{ type: sequelize.QueryTypes.SELECT }
|
|
);
|
|
|
|
const hasUpdatedAtIndex = indexes.some(idx => idx.name === 'consumables_updatedAt');
|
|
|
|
if (!hasUpdatedAtIndex) {
|
|
console.log('添加 updatedAt 索引...');
|
|
await sequelize.query('CREATE INDEX consumables_updatedAt ON consumables(updatedAt)');
|
|
console.log('updatedAt 索引添加成功');
|
|
} else {
|
|
console.log('updatedAt 索引已存在,跳过');
|
|
}
|
|
} else if (actualDbType === 'mysql') {
|
|
// MySQL: 检查并添加字段
|
|
try {
|
|
console.log('添加 version 字段...');
|
|
await sequelize.query(
|
|
"ALTER TABLE consumables ADD COLUMN version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号'"
|
|
);
|
|
console.log('version 字段添加成功');
|
|
} catch (err) {
|
|
if (err.message.includes('Duplicate column')) {
|
|
console.log('version 字段已存在,跳过');
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
// 添加索引
|
|
try {
|
|
console.log('添加 updatedAt 索引...');
|
|
await sequelize.query('CREATE INDEX idx_consumables_updatedAt ON consumables(updatedAt)');
|
|
console.log('updatedAt 索引添加成功');
|
|
} catch (err) {
|
|
if (err.message.includes('Duplicate key')) {
|
|
console.log('updatedAt 索引已存在,跳过');
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 初始化现有数据的 version 值
|
|
console.log('初始化现有数据的 version 值...');
|
|
await sequelize.query('UPDATE consumables SET version = 0 WHERE version IS NULL');
|
|
console.log('version 值初始化完成');
|
|
|
|
console.log('迁移完成!');
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('迁移失败:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
migrate();
|