282 lines
5.8 KiB
JavaScript
282 lines
5.8 KiB
JavaScript
const Sequelize = require('sequelize');
|
|
|
|
/**
|
|
* 简历信息表模型
|
|
* 存储用户简历的核心要素和分析结果
|
|
*/
|
|
module.exports = (db) => {
|
|
const resume_info = db.define("resume_info", {
|
|
// 基本信息
|
|
sn_code: {
|
|
comment: '设备SN码',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: false,
|
|
defaultValue: ''
|
|
},
|
|
account_id: {
|
|
comment: '用户ID',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: false,
|
|
defaultValue: ''
|
|
},
|
|
platform: {
|
|
comment: '平台: boss-Boss直聘, liepin-猎聘',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: false,
|
|
defaultValue: 'boss'
|
|
},
|
|
resumeId: {
|
|
comment: '简历ID',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: false,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 个人信息
|
|
fullName: {
|
|
comment: '姓名',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
gender: {
|
|
comment: '性别',
|
|
type: Sequelize.STRING(10),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
age: {
|
|
comment: '年龄',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
phone: {
|
|
comment: '电话',
|
|
type: Sequelize.STRING(20),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
email: {
|
|
comment: '邮箱',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
location: {
|
|
comment: '所在地',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 教育背景
|
|
education: {
|
|
comment: '学历',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
major: {
|
|
comment: '专业',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
school: {
|
|
comment: '毕业院校',
|
|
type: Sequelize.STRING(200),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
graduationYear: {
|
|
comment: '毕业年份',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 工作经验
|
|
workYears: {
|
|
comment: '工作年限',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
currentPosition: {
|
|
comment: '当前职位',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
currentCompany: {
|
|
comment: '当前公司',
|
|
type: Sequelize.STRING(200),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
currentSalary: {
|
|
comment: '当前薪资',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 期望信息
|
|
expectedPosition: {
|
|
comment: '期望职位',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
expectedSalary: {
|
|
comment: '期望薪资',
|
|
type: Sequelize.STRING(50),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
expectedLocation: {
|
|
comment: '期望工作地点',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
expectedIndustry: {
|
|
comment: '期望行业',
|
|
type: Sequelize.STRING(100),
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 技能和专长
|
|
skills: {
|
|
comment: '技能标签(JSON数组)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
skillDescription: {
|
|
comment: '技能描述',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
certifications: {
|
|
comment: '证书资质(JSON数组)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 项目经验
|
|
projectExperience: {
|
|
comment: '项目经验(JSON数组)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 工作经历
|
|
workExperience: {
|
|
comment: '工作经历(JSON数组)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// AI分析结果
|
|
aiSkillTags: {
|
|
comment: 'AI提取的技能标签(JSON数组)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
aiStrengths: {
|
|
comment: 'AI分析的优势',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
aiWeaknesses: {
|
|
comment: 'AI分析的劣势',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
aiCareerSuggestion: {
|
|
comment: 'AI职业建议',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
aiCompetitiveness: {
|
|
comment: 'AI竞争力评分(0-100)',
|
|
type: Sequelize.INTEGER,
|
|
allowNull: true,
|
|
defaultValue: 0
|
|
},
|
|
|
|
// 简历内容
|
|
resumeContent: {
|
|
comment: '简历完整内容(HTML或文本)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 原始数据
|
|
originalData: {
|
|
comment: '原始数据(JSON)',
|
|
type: Sequelize.TEXT,
|
|
allowNull: true,
|
|
defaultValue: ''
|
|
},
|
|
|
|
// 状态信息
|
|
isActive: {
|
|
comment: '是否活跃简历',
|
|
type: Sequelize.BOOLEAN,
|
|
allowNull: true,
|
|
defaultValue: true
|
|
},
|
|
isPublic: {
|
|
comment: '是否公开',
|
|
type: Sequelize.BOOLEAN,
|
|
allowNull: true,
|
|
defaultValue: true
|
|
},
|
|
|
|
syncTime: {
|
|
comment: '同步时间',
|
|
type: Sequelize.DATE,
|
|
allowNull: true,
|
|
defaultValue: Sequelize.NOW
|
|
}
|
|
}, {
|
|
timestamps: true,
|
|
createdAt: 'create_time',
|
|
updatedAt: 'last_modify_time',
|
|
indexes: [
|
|
{
|
|
unique: false,
|
|
fields: ['sn_code']
|
|
},
|
|
{
|
|
unique: false,
|
|
fields: ['platform']
|
|
},
|
|
{
|
|
unique: false,
|
|
fields: ['isActive']
|
|
},
|
|
|
|
]
|
|
});
|
|
|
|
// resume_info.sync({ force: true });
|
|
return resume_info
|
|
|
|
|
|
};
|
|
|