171 lines
3.4 KiB
JavaScript
171 lines
3.4 KiB
JavaScript
/**
|
|
* 模型索引文件
|
|
* @file index.js
|
|
* @description 导出所有模型并建立关联关系
|
|
*/
|
|
const { sequelize } = require('../config/database-simple');
|
|
const BaseModel = require('./BaseModel');
|
|
const Farm = require('./Farm');
|
|
const Animal = require('./Animal');
|
|
const Device = require('./Device');
|
|
const Alert = require('./Alert');
|
|
const User = require('./User');
|
|
const Role = require('./Role');
|
|
const UserRole = require('./UserRole');
|
|
const Product = require('./Product');
|
|
const Order = require('./Order');
|
|
const OrderItem = require('./OrderItem');
|
|
const SensorData = require('./SensorData');
|
|
|
|
// 建立模型之间的关联关系
|
|
|
|
// 养殖场与动物的一对多关系
|
|
Farm.hasMany(Animal, {
|
|
foreignKey: 'farm_id',
|
|
as: 'animals',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
Animal.belongsTo(Farm, {
|
|
foreignKey: 'farm_id',
|
|
as: 'farm'
|
|
});
|
|
|
|
// 养殖场与设备的一对多关系
|
|
Farm.hasMany(Device, {
|
|
foreignKey: 'farm_id',
|
|
as: 'devices',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
Device.belongsTo(Farm, {
|
|
foreignKey: 'farm_id',
|
|
as: 'farm'
|
|
});
|
|
|
|
// 养殖场与预警的一对多关系
|
|
Farm.hasMany(Alert, {
|
|
foreignKey: 'farm_id',
|
|
as: 'alerts',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
Alert.belongsTo(Farm, {
|
|
foreignKey: 'farm_id',
|
|
as: 'farm'
|
|
});
|
|
|
|
// 设备与预警的一对多关系
|
|
Device.hasMany(Alert, {
|
|
foreignKey: 'device_id',
|
|
as: 'alerts',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
Alert.belongsTo(Device, {
|
|
foreignKey: 'device_id',
|
|
as: 'device'
|
|
});
|
|
|
|
// 设备与传感器数据的一对多关系
|
|
Device.hasMany(SensorData, {
|
|
foreignKey: 'device_id',
|
|
as: 'sensorData',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
SensorData.belongsTo(Device, {
|
|
foreignKey: 'device_id',
|
|
as: 'device'
|
|
});
|
|
|
|
// 养殖场与传感器数据的一对多关系
|
|
Farm.hasMany(SensorData, {
|
|
foreignKey: 'farm_id',
|
|
as: 'sensorData',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
SensorData.belongsTo(Farm, {
|
|
foreignKey: 'farm_id',
|
|
as: 'farm'
|
|
});
|
|
|
|
// 用户与角色的多对多关系
|
|
User.belongsToMany(Role, {
|
|
through: UserRole,
|
|
foreignKey: 'user_id',
|
|
otherKey: 'role_id',
|
|
as: 'roles'
|
|
});
|
|
Role.belongsToMany(User, {
|
|
through: UserRole,
|
|
foreignKey: 'role_id',
|
|
otherKey: 'user_id',
|
|
as: 'users'
|
|
});
|
|
|
|
// 同步所有模型
|
|
const syncModels = async (options = {}) => {
|
|
try {
|
|
await sequelize.sync(options);
|
|
console.log('所有模型已同步到数据库');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('模型同步失败:', error);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
// 用户与订单的一对多关系
|
|
User.hasMany(Order, {
|
|
foreignKey: 'user_id',
|
|
as: 'orders',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
Order.belongsTo(User, {
|
|
foreignKey: 'user_id',
|
|
as: 'user'
|
|
});
|
|
|
|
// 订单与订单项的一对多关系
|
|
Order.hasMany(OrderItem, {
|
|
foreignKey: 'order_id',
|
|
as: 'orderItems',
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
OrderItem.belongsTo(Order, {
|
|
foreignKey: 'order_id',
|
|
as: 'order'
|
|
});
|
|
|
|
// 产品与订单项的一对多关系
|
|
Product.hasMany(OrderItem, {
|
|
foreignKey: 'product_id',
|
|
as: 'orderItems',
|
|
onDelete: 'RESTRICT',
|
|
onUpdate: 'CASCADE'
|
|
});
|
|
OrderItem.belongsTo(Product, {
|
|
foreignKey: 'product_id',
|
|
as: 'product'
|
|
});
|
|
|
|
module.exports = {
|
|
sequelize,
|
|
BaseModel,
|
|
Farm,
|
|
Animal,
|
|
Device,
|
|
Alert,
|
|
User,
|
|
Role,
|
|
UserRole,
|
|
Product,
|
|
Order,
|
|
OrderItem,
|
|
SensorData,
|
|
syncModels
|
|
}; |