'use strict' module.exports = (sequelize, DataTypes) => { var group = sequelize.define('group', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: DataTypes.INTEGER }, name: DataTypes.STRING, description: DataTypes.STRING(2048) }, { timestamps: false }) group.associate = function (models) { var GroupXGroup = sequelize.define('group_x_group', {}, { timestamps: false, freezeTableName: true }) var GroupXClient = sequelize.define('group_x_client', {}, { timestamps: false, freezeTableName: true }) var GroupXEvent = sequelize.define('group_x_event', { blacklist: DataTypes.BOOLEAN }, { timestamps: false, freezeTableName: true }) group.belongsToMany(group, { as: 'parents', through: GroupXGroup, foreignKey: 'childId', otherKey: 'parentId' }) group.belongsToMany(group, { as: 'subgroups', through: GroupXGroup, foreignKey: 'parentId', otherKey: 'childId' }) group.belongsToMany(models.client, { as: 'clients', through: GroupXClient, foreignKey: 'groupId', otherKey: 'clientId' }) group.belongsToMany(models.event, { as: 'events', through: GroupXEvent, foreignKey: 'groupId', otherKey: 'eventId' }) group.belongsTo(models.config, { as: 'config' }) group.hasMany(models.iprange, { as: 'ipranges' }) } return group }