This commit is contained in:
104
migration_scripts/add-status-etc-fields.js
Normal file
104
migration_scripts/add-status-etc-fields.js
Normal file
@@ -0,0 +1,104 @@
|
||||
const { sequelize } = require('../config/database');
|
||||
|
||||
/**
|
||||
* Migration: Thêm trường `status` (INT, default 0) và `etc` (TEXT, default '')
|
||||
* cho cả bảng `vocab` và `sentences`.
|
||||
*
|
||||
* - status: dùng để confirm lại vocab/sentence (0 = chưa confirm, etc.)
|
||||
* - etc: thông tin bổ sung dạng chuỗi
|
||||
*/
|
||||
async function run() {
|
||||
try {
|
||||
await sequelize.authenticate();
|
||||
console.log('✅ Database connected\n');
|
||||
|
||||
const queryInterface = sequelize.getQueryInterface();
|
||||
|
||||
// ─── VOCAB ───────────────────────────────────────────
|
||||
console.log('📦 Đang migrate bảng VOCAB...');
|
||||
|
||||
// Kiểm tra & thêm status
|
||||
try {
|
||||
await queryInterface.addColumn('vocab', 'status', {
|
||||
type: sequelize.Sequelize.DataTypes.INTEGER,
|
||||
defaultValue: 0,
|
||||
allowNull: false,
|
||||
comment: 'Trạng thái confirm (0 = chưa confirm)'
|
||||
});
|
||||
console.log(' ✅ Đã thêm cột "status" vào bảng vocab');
|
||||
} catch (e) {
|
||||
if (e.message.includes('Duplicate') || e.message.includes('already exists') || e.original?.code === 'ER_DUP_FIELDNAME') {
|
||||
console.log(' ⚠️ Cột "status" đã tồn tại trong bảng vocab, bỏ qua.');
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// Kiểm tra & thêm etc
|
||||
try {
|
||||
await queryInterface.addColumn('vocab', 'etc', {
|
||||
type: sequelize.Sequelize.DataTypes.TEXT,
|
||||
defaultValue: '',
|
||||
allowNull: true,
|
||||
comment: 'Thông tin bổ sung'
|
||||
});
|
||||
console.log(' ✅ Đã thêm cột "etc" vào bảng vocab');
|
||||
} catch (e) {
|
||||
if (e.message.includes('Duplicate') || e.message.includes('already exists') || e.original?.code === 'ER_DUP_FIELDNAME') {
|
||||
console.log(' ⚠️ Cột "etc" đã tồn tại trong bảng vocab, bỏ qua.');
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// ─── SENTENCES ───────────────────────────────────────
|
||||
console.log('\n📦 Đang migrate bảng SENTENCES...');
|
||||
|
||||
// Kiểm tra & thêm status
|
||||
try {
|
||||
await queryInterface.addColumn('sentences', 'status', {
|
||||
type: sequelize.Sequelize.DataTypes.INTEGER,
|
||||
defaultValue: 0,
|
||||
allowNull: false,
|
||||
comment: 'Trạng thái confirm (0 = chưa confirm)'
|
||||
});
|
||||
console.log(' ✅ Đã thêm cột "status" vào bảng sentences');
|
||||
} catch (e) {
|
||||
if (e.message.includes('Duplicate') || e.message.includes('already exists') || e.original?.code === 'ER_DUP_FIELDNAME') {
|
||||
console.log(' ⚠️ Cột "status" đã tồn tại trong bảng sentences, bỏ qua.');
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// Kiểm tra & thêm etc (sentences đã có etc trong model nhưng chưa chắc có trong DB)
|
||||
try {
|
||||
await queryInterface.addColumn('sentences', 'etc', {
|
||||
type: sequelize.Sequelize.DataTypes.TEXT,
|
||||
defaultValue: '',
|
||||
allowNull: true,
|
||||
comment: 'Thông tin bổ sung'
|
||||
});
|
||||
console.log(' ✅ Đã thêm cột "etc" vào bảng sentences');
|
||||
} catch (e) {
|
||||
if (e.message.includes('Duplicate') || e.message.includes('already exists') || e.original?.code === 'ER_DUP_FIELDNAME') {
|
||||
console.log(' ⚠️ Cột "etc" đã tồn tại trong bảng sentences, bỏ qua.');
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('\n─────────────────────────────────────');
|
||||
console.log('✅ Migration hoàn tất!');
|
||||
console.log(' - vocab: status (INT, default 0), etc (TEXT, default "")');
|
||||
console.log(' - sentences: status (INT, default 0), etc (TEXT, default "")');
|
||||
console.log('─────────────────────────────────────');
|
||||
|
||||
process.exit(0);
|
||||
} catch (error) {
|
||||
console.error('❌ Lỗi:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
run();
|
||||
Reference in New Issue
Block a user