138 lines
3.6 KiB
JavaScript
138 lines
3.6 KiB
JavaScript
'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" });
|
|
|
|
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,
|
|
}]
|
|
},
|
|
]
|
|
}
|
|
});
|
|
|
|
Speaker.addScope('includeValues', () => {
|
|
return {
|
|
include: [{
|
|
model: sequelize.models.Value,
|
|
as: 'values',
|
|
attributes: ['id', 'name'],
|
|
required: false,
|
|
}]
|
|
}
|
|
});
|
|
|
|
return Speaker;
|
|
}; |