app2-api/modules/venues/venue.model.js
2019-07-29 15:39:52 +02:00

75 lines
1.9 KiB
JavaScript

'use strict';
const cdnHelper = require('../../helpers/cdn.helper');
module.exports = function (sequelize, DataTypes) {
const Venue = sequelize.define('Venue', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.STRING,
},
address: {
type: DataTypes.STRING,
allowNull: false,
},
city: {
type: DataTypes.STRING,
allowNull: false,
},
country: {
type: DataTypes.STRING,
},
state: {
type: DataTypes.STRING,
},
postal_code: {
type: DataTypes.STRING,
},
accessibility: {
type: DataTypes.STRING,
},
gmt: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 1,
},
latitude: {
type: DataTypes.DECIMAL(10, 8),
},
longitude: {
type: DataTypes.DECIMAL(11, 8),
},
image_url: {
type: DataTypes.VIRTUAL,
get: function () {
const city = this.get('city');
return cdnHelper.getCDNCityMediaUrl(city)
}
}
}, {
tableName: 'venues',
freezeTableName: true,
timestamps: true,
});
Venue.addScope('includeOnlyCities', () => {
return {
attributes: [[sequelize.fn('DISTINCT', sequelize.col('city')), 'city']]
}
});
Venue.associate = function (models) {
Venue.Events = Venue.hasMany(models.Event, { foreignKey: 'venueId', as: 'events' });
};
return Venue;
};