158 lines
3.0 KiB
JavaScript
158 lines
3.0 KiB
JavaScript
/**
|
||
* 模型索引文件
|
||
* @file index.js
|
||
* @description 导出所有模型并建立关联关系
|
||
*/
|
||
const { sequelize } = require('../config/database');
|
||
|
||
// 导入所有模型
|
||
const User = require('./User');
|
||
const Role = require('./Role');
|
||
const Account = require('./Account');
|
||
const Transaction = require('./Transaction');
|
||
const LoanProduct = require('./LoanProduct');
|
||
const Employee = require('./Employee');
|
||
const Department = require('./Department');
|
||
const Position = require('./Position');
|
||
const Report = require('./Report');
|
||
const Project = require('./Project');
|
||
const SupervisionTask = require('./SupervisionTask');
|
||
|
||
// 定义模型关联关系
|
||
|
||
// 用户与角色关联
|
||
User.belongsTo(Role, {
|
||
foreignKey: 'role_id',
|
||
as: 'role',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
Role.hasMany(User, {
|
||
foreignKey: 'role_id',
|
||
as: 'users'
|
||
});
|
||
|
||
// 用户与账户关联
|
||
User.hasMany(Account, {
|
||
foreignKey: 'user_id',
|
||
as: 'accounts'
|
||
});
|
||
|
||
Account.belongsTo(User, {
|
||
foreignKey: 'user_id',
|
||
as: 'user'
|
||
});
|
||
|
||
// 账户与交易记录关联
|
||
Account.hasMany(Transaction, {
|
||
foreignKey: 'account_id',
|
||
as: 'transactions'
|
||
});
|
||
|
||
Transaction.belongsTo(Account, {
|
||
foreignKey: 'account_id',
|
||
as: 'account'
|
||
});
|
||
|
||
// 交易记录与用户关联(通过账户)
|
||
// 移除不合理的Transaction->User through Account的belongsTo定义,避免错误外键映射
|
||
|
||
// 员工与部门关联
|
||
Employee.belongsTo(Department, {
|
||
foreignKey: 'department_id',
|
||
as: 'department',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
Department.hasMany(Employee, {
|
||
foreignKey: 'department_id',
|
||
as: 'employees'
|
||
});
|
||
|
||
// 员工与职位关联
|
||
Employee.belongsTo(Position, {
|
||
foreignKey: 'position_id',
|
||
as: 'position',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
Position.hasMany(Employee, {
|
||
foreignKey: 'position_id',
|
||
as: 'employees'
|
||
});
|
||
|
||
// 报表与用户关联
|
||
Report.belongsTo(User, {
|
||
foreignKey: 'createdBy',
|
||
as: 'creator',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
User.hasMany(Report, {
|
||
foreignKey: 'createdBy',
|
||
as: 'reports'
|
||
});
|
||
|
||
// 项目与用户关联(创建人)
|
||
Project.belongsTo(User, {
|
||
foreignKey: 'createdBy',
|
||
as: 'creator',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
User.hasMany(Project, {
|
||
foreignKey: 'createdBy',
|
||
as: 'createdProjects'
|
||
});
|
||
|
||
// 项目与用户关联(更新人)
|
||
Project.belongsTo(User, {
|
||
foreignKey: 'updatedBy',
|
||
as: 'updater',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
User.hasMany(Project, {
|
||
foreignKey: 'updatedBy',
|
||
as: 'updatedProjects'
|
||
});
|
||
|
||
// 监管任务与用户关联(创建人)
|
||
SupervisionTask.belongsTo(User, {
|
||
foreignKey: 'createdBy',
|
||
as: 'creator',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
User.hasMany(SupervisionTask, {
|
||
foreignKey: 'createdBy',
|
||
as: 'createdSupervisionTasks'
|
||
});
|
||
|
||
// 监管任务与用户关联(更新人)
|
||
SupervisionTask.belongsTo(User, {
|
||
foreignKey: 'updatedBy',
|
||
as: 'updater',
|
||
targetKey: 'id'
|
||
});
|
||
|
||
User.hasMany(SupervisionTask, {
|
||
foreignKey: 'updatedBy',
|
||
as: 'updatedSupervisionTasks'
|
||
});
|
||
|
||
// 导出所有模型和数据库实例
|
||
module.exports = {
|
||
sequelize,
|
||
User,
|
||
Role,
|
||
Account,
|
||
Transaction,
|
||
LoanProduct,
|
||
Employee,
|
||
Department,
|
||
Position,
|
||
Report,
|
||
Project,
|
||
SupervisionTask
|
||
}; |