'use strict'; module.exports = function (sequelize, DataTypes) { const Multimedia = sequelize.define('Multimedia', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, multimediafileId: { type: DataTypes.UUID, allowNull: false, }, entityId: { type: DataTypes.UUID, allowNull: false, }, entityName: { type: DataTypes.STRING, allowNull: false, }, type: { type: DataTypes.STRING, allowNull: false, }, entity: { type: DataTypes.VIRTUAL, get: function() { const name = this.get('entityName'); const id = this.get('entityId'); let modelName = ''; switch (name) { case 'post': modelName = 'Post'; break; case 'speaker': modelName = 'Speaker' break; case 'event': modelName = 'Event'; break; default: break; } return sequelize.models[modelName].findByPk(id); } } }, { indexes: [{ unique: false, fields: ['entityId'] }], tableName: 'multimedias', freezeTableName: true, timestamps: true, }); Multimedia.associate = function (models) { Multimedia.MultimediaFile = Multimedia.belongsTo(models.MultimediaFile, { foreignKey: 'multimediafileId' }); }; return Multimedia; };