'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' } }, }); 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" }); Speaker.Multimedias = Speaker.hasMany(models.Multimedia, { foreignKey: 'entityId', as: { singular: 'multimedia', plural: 'multimedias' } }); /* Speaker.Multimedias = Speaker.belongsToMany(models.MultimediaFile, { through: models.MultimediaSpeaker, foreignKey: 'speakerId' }); */ }; 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, }] }, ] } }); return Speaker; };