2019-06-26 10:24:58 +00:00
|
|
|
'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: {
|
2019-07-05 07:06:29 +00:00
|
|
|
type: DataTypes.TEXT,
|
2019-06-26 10:24:58 +00:00
|
|
|
},
|
|
|
|
|
short_description: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
|
|
|
|
slogan: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
|
|
|
|
twitter: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
|
|
|
|
facebook: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
|
|
|
|
youtube: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
2019-07-05 07:06:29 +00:00
|
|
|
linkedin: {
|
2019-06-26 10:24:58 +00:00
|
|
|
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,
|
2019-07-18 16:13:27 +00:00
|
|
|
|
|
|
|
|
defaultScope: {
|
|
|
|
|
where: {
|
|
|
|
|
state: 'publish'
|
|
|
|
|
}
|
|
|
|
|
},
|
2019-06-26 10:24:58 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Speaker.associate = function (models) {
|
|
|
|
|
|
2019-07-14 16:44:59 +00:00
|
|
|
Speaker.Type = Speaker.belongsTo(models.SpeakerType, { foreignKey: 'typeId', as: "type" });
|
|
|
|
|
Speaker.UserCreate = Speaker.belongsTo(models.User, { foreignKey: 'userId', as: "user" });
|
2019-06-26 10:24:58 +00:00
|
|
|
Speaker.Values = Speaker.belongsToMany(models.Value, {
|
|
|
|
|
through: models.SpeakerValue,
|
2019-07-14 16:44:59 +00:00
|
|
|
as: 'values',
|
2019-06-26 10:24:58 +00:00
|
|
|
foreignKey: 'speakerId'
|
|
|
|
|
});
|
|
|
|
|
|
2019-07-17 14:47:27 +00:00
|
|
|
Speaker.EventDetails = Speaker.hasMany(models.EventDetail, { foreignKey: 'speakerId', as: "eventdetails" });
|
2019-07-14 16:44:59 +00:00
|
|
|
Speaker.Questions = Speaker.hasMany(models.EventQuestion, { foreignKey: 'speakerId', as: "questions" });
|
|
|
|
|
|
|
|
|
|
Speaker.Multimedias = Speaker.hasMany(models.Multimedia, {
|
|
|
|
|
foreignKey: 'entityId',
|
|
|
|
|
as: { singular: 'multimedia', plural: 'multimedias' }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/*
|
2019-06-26 10:24:58 +00:00
|
|
|
Speaker.Multimedias = Speaker.belongsToMany(models.MultimediaFile, {
|
|
|
|
|
through: models.MultimediaSpeaker,
|
|
|
|
|
foreignKey: 'speakerId'
|
|
|
|
|
});
|
2019-07-14 16:44:59 +00:00
|
|
|
*/
|
2019-06-26 10:24:58 +00:00
|
|
|
};
|
|
|
|
|
|
2019-07-19 15:47:06 +00:00
|
|
|
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,
|
|
|
|
|
}]
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
2019-06-26 10:24:58 +00:00
|
|
|
return Speaker;
|
|
|
|
|
};
|