'use strict'; const Sequelize = require('sequelize'); const getStateText = (inscription) => { if (inscription.validated == true) return 'Inscripción confirmada' else if (inscription.overflowEventId) return 'Inscripción confirmada a lista de espera' else if (inscription.reservationId) return'Inscripción confirmada a lista de espera de tu reserva' else return 'N/A'; }; module.exports = function (sequelize, DataTypes) { const EventInscription = sequelize.define('EventInscription', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, date: { type: DataTypes.DATE, }, code_ticket: { type: DataTypes.STRING(45), }, type: { type: DataTypes.STRING, allowNull: false, defaultValue: 'regular' //grupal, invitacion-regular, invitation-grupal }, source: { type: DataTypes.STRING, //app, web }, marketing_memberId: { type: DataTypes.STRING, }, validated: { type: DataTypes.BOOLEAN, }, stateText: { type: Sequelize.VIRTUAL(Sequelize.STRING, ['validated', 'reservationId', 'overflowEventId']), get: function () { return getStateText(this); }, }, reservationId:{ //contendra el id de la reserva o de la lista de espera de la reserva type: DataTypes.UUID, foreignKey: true, }, overflowEventId: { //contendra el id del evento de lista de espera del evento type: DataTypes.UUID, foreignKey: true, } }, { tableName: 'events_inscriptions', freezeTableName: true, timestamps: true, defaultScope: { order: [ ['date', 'DESC'] ], include: [{ model: sequelize.models.User, as: 'user' }], }, }); EventInscription.associate = function (models) { EventInscription.Event = EventInscription.belongsTo(models.Event, { foreignKey: 'eventId', as: 'event' }); EventInscription.Reservation = EventInscription.belongsTo(models.EventReservation, { foreignKey: 'reservationId', as: 'reservation'}); EventInscription.User = EventInscription.belongsTo(models.User, { foreignKey: 'userId', as: 'user' }); EventInscription.UserValidate = EventInscription.belongsTo(models.User, { foreignKey: 'validateUserId' }); }; EventInscription.addScope('includeEventAndVenue', () => { return { include: [{ model: sequelize.models.Event, as: 'event', attributes: ['id', 'name', 'description', 'campaign_text', 'init_date', 'end_date', 'init_available_date', 'end_available_date', 'stateCode', 'stateText'], include: [{ model: sequelize.models.Venue, as: 'venue', attributes: { exclude: ['createdAt', 'updatedAt'], } }], }], } }); EventInscription.addScope('includeReservation', () => { return { include: [{ model: sequelize.models.EventReservation, as: 'reservation', require: false, }], } }); EventInscription.addScope('includeUser', () => { return { include: [{ model: sequelize.models.User, as: 'user', }], } }); return EventInscription; };