106 lines
3.0 KiB
JavaScript
106 lines
3.0 KiB
JavaScript
/**
|
||
* 同步 resume_info 表结构
|
||
* 用于创建或更新数据库表
|
||
*/
|
||
|
||
const db = require('../api/middleware/dbProxy');
|
||
|
||
async function syncResumeTable() {
|
||
console.log('🔄 开始同步 resume_info 表结构...\n');
|
||
|
||
try {
|
||
// 获取模型
|
||
const resume_info = db.getModel('resume_info');
|
||
|
||
if (!resume_info) {
|
||
console.error('❌ 无法获取 resume_info 模型');
|
||
return;
|
||
}
|
||
|
||
// 同步表结构(force: true 会删除并重建表,慎用!)
|
||
// 如果表已存在且有数据,请使用 alter: true
|
||
console.log('⚠️ 注意:使用 alter: true 模式同步(保留现有数据)');
|
||
console.log('如果需要完全重建表,请修改为 force: true\n');
|
||
|
||
await resume_info.sync({ alter: true });
|
||
|
||
console.log('✅ resume_info 表同步成功!\n');
|
||
|
||
// 显示表结构
|
||
const tableInfo = await db.models.sequelize.query(
|
||
`DESCRIBE resume_info`,
|
||
{ type: db.models.sequelize.QueryTypes.SELECT }
|
||
);
|
||
|
||
console.log('📋 当前表结构:');
|
||
console.table(tableInfo.map(field => ({
|
||
字段名: field.Field,
|
||
类型: field.Type,
|
||
允许空: field.Null,
|
||
默认值: field.Default
|
||
})));
|
||
|
||
// 检查关键字段
|
||
const requiredFields = [
|
||
'id',
|
||
'sn_code',
|
||
'account_id',
|
||
'platform',
|
||
'fullName',
|
||
'gender',
|
||
'age',
|
||
'phone',
|
||
'email',
|
||
'education',
|
||
'workYears',
|
||
'expectedPosition',
|
||
'expectedSalary',
|
||
'skills',
|
||
'projectExperience',
|
||
'workExperience',
|
||
'aiSkillTags',
|
||
'aiStrengths',
|
||
'aiWeaknesses',
|
||
'aiCareerSuggestion',
|
||
'aiCompetitiveness',
|
||
'originalData',
|
||
'isActive',
|
||
'syncTime'
|
||
];
|
||
const existingFields = tableInfo.map(f => f.Field);
|
||
|
||
console.log('\n🔍 检查关键字段:');
|
||
const missingFields = [];
|
||
requiredFields.forEach(field => {
|
||
const exists = existingFields.includes(field);
|
||
console.log(` ${exists ? '✅' : '❌'} ${field}`);
|
||
if (!exists) {
|
||
missingFields.push(field);
|
||
}
|
||
});
|
||
|
||
if (missingFields.length > 0) {
|
||
console.log('\n⚠️ 缺少以下字段:', missingFields.join(', '));
|
||
console.log('建议:重新运行同步或手动添加这些字段');
|
||
} else {
|
||
console.log('\n✅ 所有必需字段都存在!');
|
||
}
|
||
|
||
} catch (error) {
|
||
console.error('❌ 同步失败:', error.message);
|
||
console.error('\n详细错误:', error);
|
||
}
|
||
}
|
||
|
||
// 执行同步
|
||
syncResumeTable()
|
||
.then(() => {
|
||
console.log('\n✨ 同步完成!');
|
||
process.exit(0);
|
||
})
|
||
.catch(error => {
|
||
console.error('\n💥 执行失败:', error);
|
||
process.exit(1);
|
||
});
|
||
|