app2-api/modules/speakers/speaker.model.js

167 lines
4.4 KiB
JavaScript
Raw Normal View History

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,
},
2019-09-03 08:52:35 +00:00
featured: {
type: DataTypes.BOOLEAN,
defaultValue: false,
}
2019-06-26 10:24:58 +00:00
}, {
tableName: 'speakers',
freezeTableName: true,
timestamps: true,
2019-07-18 16:13:27 +00:00
defaultScope: {
2019-08-05 15:34:59 +00:00
include: [{
2019-07-23 17:34:28 +00:00
model: sequelize.models.SpeakerType,
as: 'type'
2019-08-05 15:34:59 +00:00
},
2019-07-23 17:34:28 +00:00
/* {
model: sequelize.models.Value,
as: 'values',
required: false,
},
*/
]
2019-07-18 16:13:27 +00:00
},
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" });
2019-07-26 14:50:53 +00:00
//OJO antes de force comentar
2019-07-23 18:26:30 +00:00
// 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
2019-07-14 16:44:59 +00:00
Speaker.Multimedias = Speaker.hasMany(models.Multimedia, {
foreignKey: 'entityId',
2019-08-05 17:44:16 +00:00
as: { singular: 'multimedia', plural: 'multimedias' },
2019-07-14 16:44:59 +00:00
});
2019-07-23 18:26:30 +00:00
Speaker.Comments = Speaker.hasMany(models.Comment, {
foreignKey: 'entityId',
as: { singular: 'comment', plural: 'comments' }
2019-06-26 10:24:58 +00:00
});
2019-07-23 18:26:30 +00:00
2019-06-26 10:24:58 +00:00
};
2019-08-05 15:34:59 +00:00
Speaker.addScope('onlyPublished', {
where: {
state: 'publish'
},
});
2019-07-19 15:47:06 +00:00
Speaker.addScope('featured', {
2019-09-03 08:52:35 +00:00
where: {
featured: true
},
2019-07-19 15:47:06 +00:00
});
Speaker.addScope('last', {
order: [
['createdAt', 'DESC']
]
});
Speaker.addScope('includeMultimedias', () => {
return {
include: [{
model: sequelize.models.Multimedia,
2019-07-25 17:21:26 +00:00
as: { singular: 'multimedia', plural: 'multimedias' },
2019-07-19 15:47:06 +00:00
required: false,
include: [{
model: sequelize.models.MultimediaFile,
2019-07-25 17:21:26 +00:00
as: "multimediaFile"
2019-07-26 14:50:53 +00:00
}]
2019-07-19 15:47:06 +00:00
},
]
}
});
2019-08-20 12:10:49 +00:00
Speaker.addScope('includeValues', (valueList = undefined) => {
const config = {
model: sequelize.models.Value,
as: 'values',
attributes: ['id', 'name'],
required: false,
};
if (valueList) {
config.where = { id: valueList };
config.required = true;
2019-07-23 17:34:28 +00:00
}
2019-08-20 12:10:49 +00:00
return {
include: [config]
};
2019-07-23 17:34:28 +00:00
});
2019-07-19 15:47:06 +00:00
2019-07-23 18:26:30 +00:00
Speaker.addScope('includeComments', () => {
return {
include: [{
model: sequelize.models.Comment,
as: 'comments',
required: false,
2019-07-24 14:50:41 +00:00
include: [{
model: sequelize.models.User,
as: 'user',
}]
2019-07-23 18:26:30 +00:00
}]
}
});
2019-06-26 10:24:58 +00:00
return Speaker;
};