app2-api/modules/entities/entity.model.js

71 lines
1.9 KiB
JavaScript
Raw Normal View History

2019-07-19 10:17:52 +00:00
const Sequelize = require('sequelize');
module.exports = function (sequelize, DataTypes) {
const Entity = sequelize.define('Entity', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false
},
2019-07-10 17:26:22 +00:00
state: {
type: DataTypes.STRING(45),
allowNull: false,
default: 'draft',
2019-07-19 10:17:52 +00:00
},
contact_person: {
type: DataTypes.STRING,
},
contact_email: {
type: DataTypes.STRING,
2019-07-10 17:26:22 +00:00
}
}, {
tableName: 'entities',
freezeTableName: true,
timestamps: true,
2019-07-19 10:17:52 +00:00
defaultScope: {
where: {
state: 'publish'
},
},
});
Entity.associate = function (models) {
Entity.EntityTypes = Entity.belongsToMany(models.EntityType, {
through: models.EntityEntitiesTypes,
2019-07-17 12:44:15 +00:00
foreignKey: 'entityId',
as: 'types'
});
2019-07-11 18:05:06 +00:00
Entity.User = Entity.hasMany(models.User, { foreignKey: 'entityId' });
2019-07-17 12:44:15 +00:00
Entity.EventsReservations = Entity.hasMany(models.EventReservation, { foreignKey: 'entityId', as: 'reservations' });
};
2019-07-19 10:17:52 +00:00
Entity.addScope('onlyColleges', () => {
return {
include: [{ model: sequelize.models.EntityType,
as: 'types',
where: {alias: 'college'},
attributes: [],
}]
}
});
Entity.addScope('onlyPartners', () => {
return {
include: [{
model: sequelize.models.EntityType,
as: 'types',
where: { alias: 'partner' },
attributes: [],
}]
}
});
return Entity;
};