'use strict'; module.exports = function (sequelize, DataTypes) { const Speaker = sequelize.define('Speaker', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, name: { type: DataTypes.STRING, allowNull: false, }, description: { type: DataTypes.TEXT, }, short_description: { type: DataTypes.STRING, }, slogan: { type: DataTypes.STRING, }, twitter: { type: DataTypes.STRING, }, facebook: { type: DataTypes.STRING, }, youtube: { type: DataTypes.STRING, }, linkedin: { type: DataTypes.STRING, }, instagram: { type: DataTypes.STRING, }, web: { type: DataTypes.STRING, }, state: { type: DataTypes.STRING, allowNull: false, defaultValue: 'borrador' }, typeId: { type: DataTypes.UUID, foreignKey: true, }, }, { tableName: 'speakers', freezeTableName: true, timestamps: true, defaultScope: { where: { state: 'publish' }, include: [ { model: sequelize.models.SpeakerType, as: 'type' }, /* { model: sequelize.models.Value, as: 'values', required: false, }, */ ] }, }); Speaker.associate = function (models) { Speaker.Type = Speaker.belongsTo(models.SpeakerType, { foreignKey: 'typeId', as: "type" }); Speaker.UserCreate = Speaker.belongsTo(models.User, { foreignKey: 'userId', as: "user" }); Speaker.Values = Speaker.belongsToMany(models.Value, { through: models.SpeakerValue, as: 'values', foreignKey: 'speakerId' }); Speaker.EventDetails = Speaker.hasMany(models.EventDetail, { foreignKey: 'speakerId', as: "eventdetails" }); Speaker.Questions = Speaker.hasMany(models.EventQuestion, { foreignKey: 'speakerId', as: "questions" }); //OJOJOJOJOJOJOJJOJ // OJO GENERA UN FOREIGN KEY Con eventos y habrĂ¡ ID de otras entidades que no exitan en la tabla eventos, porque son post o speakers Speaker.Multimedias = Speaker.hasMany(models.Multimedia, { foreignKey: 'entityId', as: { singular: 'multimedia', plural: 'multimedias' } }); Speaker.Comments = Speaker.hasMany(models.Comment, { foreignKey: 'entityId', as: { singular: 'comment', plural: 'comments' } }); }; Speaker.addScope('featured', { order: [ ['updatedAt', 'DESC'] ] }); Speaker.addScope('last', { order: [ ['createdAt', 'DESC'] ] }); Speaker.addScope('includeMultimedias', () => { return { include: [{ model: sequelize.models.Multimedia, as: 'multimedias', required: false, include: [{ model: sequelize.models.MultimediaFile, }] }, ] } }); Speaker.addScope('includeValues', () => { return { include: [{ model: sequelize.models.Value, as: 'values', attributes: ['id', 'name'], required: false, }] } }); Speaker.addScope('includeComments', () => { return { include: [{ model: sequelize.models.Comment, as: 'comments', required: false, }] } }); return Speaker; };