'use strict'; const moment = require('moment'); const Sequelize = require('sequelize'); module.exports = function (sequelize, DataTypes) { const Event = sequelize.define('Event', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, name: { type: DataTypes.STRING, allowNull: false, }, description: { type: DataTypes.STRING, }, campaign_text: { type: DataTypes.TEXT, allowNull: true }, date: { type: DataTypes.DATE, allowNull: false, }, init_available_date: { type: DataTypes.DATE, }, end_available_date: { type: DataTypes.DATE, }, gmt: { type: DataTypes.INTEGER, defaultValue: 1, }, assistants: { type: DataTypes.INTEGER, }, confirmed: { type: DataTypes.INTEGER, }, allow_multiple: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, multiple_limit: { type: DataTypes.INTEGER, }, allow_overflow: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, overflow_eventId: { type: DataTypes.UUID, foreignKey: true, require: false, }, state: { type: DataTypes.STRING, allowNull: false, defaultValue: 'borrador' }, typeId: { type: DataTypes.UUID, foreignKey: true, }, venueId: { type: DataTypes.UUID, foreignKey: true, }, url_streaming: { type: DataTypes.STRING, }, url_poll: { type: DataTypes.STRING, }, url_registration: { type: DataTypes.STRING, }, marketingList: { type: DataTypes.STRING, }, userId: { type: DataTypes.UUID, foreignKey: true, }, }, { tableName: 'events', freezeTableName: true, timestamps: true, defaultScope: { //Se pude poner algo en función del usuario????? }, scopes: { next: { where: { date: { [Sequelize.Op.gte]: moment().add(1, 'days').startOf('day').utc() } }, }, current: { where: { date: { [Sequelize.Op.gte]: moment().startOf('day').utc(), [Sequelize.Op.lt]: moment().add(1, 'days').startOf('day').utc(), } } }, past: { where: { date: { [Sequelize.Op.lt]: moment().startOf('day').utc() } } }, } }); Event.associate = function (models) { // Event.OverflowEvent = Event.belongsTo(models.Event, { // as: 'overflowEvent', // foreignKey: 'overflow_eventId', // required: false }); Event.Type = Event.belongsTo(models.EventType, { foreignKey: 'typeId', as: "type" }); Event.UserCreate = Event.belongsTo(models.User, { foreignKey: 'userId', as: "user" }); Event.Venue = Event.belongsTo(models.Venue, { foreignKey: 'venueId', as: "venue" }); Event.Schedule = Event.hasMany(models.EventSchedule, { foreignKey: 'eventId', as: "schedule" }); Event.Comments = Event.hasMany(models.Comment, { foreignKey: 'entityId', as: "comments" }); Event.Multimedias = Event.hasMany(models.Multimedia, { foreignKey: 'entityId', as: { singular: 'multimedia', plural: 'multimedias' }}); Event.Reservations = Event.hasMany(models.EventReservation, { foreignKey: 'eventId', as: "reservations" }); Event.Inscriptions = Event.hasMany(models.EventInscription, { foreignKey: 'eventId', as: "inscriptions" }); Event.Questions = Event.hasMany(models.EventQuestion, { foreignKey: 'eventId', as: "questions" }); }; return Event; };