app2-api/modules/locations/location.model.js

110 lines
3.0 KiB
JavaScript
Raw Normal View History

const Sequelize = require("sequelize");
2019-08-27 11:08:04 +00:00
module.exports = function (sequelize, DataTypes) {
const Location = sequelize.define(
"Location",
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
country: {
type: DataTypes.STRING(125),
allowNull: false,
},
city: {
type: DataTypes.STRING(125),
allowNull: false,
},
description: {
type: DataTypes.STRING,
},
country_code: {
type: DataTypes.STRING(2),
default: "ES",
},
},
{
tableName: "locations",
freezeTableName: true,
timestamps: true,
indexes: [
{
unique: true,
fields: ["country", "city"],
2019-08-27 11:08:04 +00:00
},
{
unique: false,
fields: ["country_code"],
2019-08-27 11:08:04 +00:00
},
],
}
);
2019-08-27 11:08:04 +00:00
Location.associate = function (models) {
Location.Events = Location.hasMany(models.Event, { as: "events", foreignKey: "locationId" });
2019-08-27 11:08:04 +00:00
//OJO antes de force comentar
// 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
Location.Multimedias = Location.hasMany(models.Multimedia, {
foreignKey: "entityId",
as: { singular: "multimedia", plural: "multimedias" },
2019-08-27 11:08:04 +00:00
});
};
2019-08-27 11:08:04 +00:00
Location.addScope("includeMultimedias", () => {
return {
include: [
{
model: sequelize.models.Multimedia,
as: { singular: "multimedia", plural: "multimedias" },
required: false,
include: [
{
model: sequelize.models.MultimediaFile,
as: "multimediaFile",
2019-08-28 09:07:38 +00:00
},
],
},
],
};
});
2019-08-28 09:07:38 +00:00
Location.addScope("includeEvents", () => {
return {
include: [
{
model: sequelize.models.Event,
as: "events",
required: false,
// group: ['typeId'],
// attributes: ['name', 'type.title',] //[sequelize.fn('COUNT', sequelize.col('events.typeId')), 'ediciones'],] // [sequelize.fn('SUM', sequelize.col('Event.assistants')), 'assistants']]
// attributes: [[sequelize.fn('COUNT', sequelize.col('typeId')), 'ediciones'],] // [sequelize.fn('SUM', sequelize.col('Event.assistants')), 'assistants']]
// include: [{
// model: sequelize.models.MultimediaFile,
// as: "multimediaFile"
// }]
},
],
};
});
2019-08-28 09:07:38 +00:00
Location.addScope("includeGroupEvents", () => {
return {
include: [
{
as: "events",
required: false,
// include: [{
// model: sequelize.models.MultimediaFile,
// as: "multimediaFile"
// }]
},
],
};
});
2019-08-28 09:07:38 +00:00
return Location;
};