diff --git a/server/api/controller/event.js b/server/api/controller/event.js index ea96b2f8..45246bf7 100644 --- a/server/api/controller/event.js +++ b/server/api/controller/event.js @@ -24,6 +24,7 @@ const eventController = { async _getMeta () { const places = await Place.findAll({ + where: { confirmed: true }, order: [[Sequelize.literal('weigth'), 'DESC']], attributes: { include: [[Sequelize.fn('count', Sequelize.col('events.placeId')), 'weigth']], @@ -34,6 +35,7 @@ const eventController = { }) const tags = await Tag.findAll({ + where: { confirmed: true }, raw: true, order: [['weigth', 'DESC']], attributes: { @@ -161,7 +163,7 @@ const eventController = { */ async confirm (req, res) { const id = Number(req.params.event_id) - const event = await Event.findByPk(id) + const event = await Event.findByPk(id, { include: [Place, Tag] }) if (!event) { return res.sendStatus(404) } if (!req.user.is_admin && req.user.id !== event.userId) { return res.sendStatus(403) @@ -169,6 +171,15 @@ const eventController = { try { event.is_visible = true + + // confirm tag & place if needed + if (!event.place.confirmed) { + await event.place.update({ confirmed: true }) + } + + await Tag.update({ confirmed: true }, + { where: { confirmed: false, tag: { [Op.in]: event.tags.map(t => t.tag) } } }) + await event.save() res.sendStatus(200) @@ -277,7 +288,10 @@ const eventController = { const [place] = await Place.findOrCreate({ where: { name: body.place_name }, - defaults: { address: body.place_address } + defaults: { + address: body.place_address, + confirmed: !!req.user + } }) await event.setPlace(place) @@ -285,7 +299,7 @@ const eventController = { // create/assign tags if (body.tags) { - await Tag.bulkCreate(body.tags.map(t => ({ tag: t })), { ignoreDuplicates: true }) + await Tag.bulkCreate(body.tags.map(t => ({ tag: t, confirmed: !!req.user })), { ignoreDuplicates: true }) const tags = await Tag.findAll({ where: { tag: { [Op.in]: body.tags } } }) await Promise.all(tags.map(t => t.update({ weigth: Number(t.weigth) + 1 }))) await event.addTags(tags) diff --git a/server/api/models/place.js b/server/api/models/place.js index 2584f7b4..8db4e845 100644 --- a/server/api/models/place.js +++ b/server/api/models/place.js @@ -11,7 +11,12 @@ Place.init({ index: true, allowNull: false }, - address: DataTypes.STRING + address: DataTypes.STRING, + confirmed: { + type: DataTypes.BOOLEAN, + defaultValue: true, + allowNull: false + } }, { sequelize, modelName: 'place' }) // Place.hasMany(Event) diff --git a/server/api/models/tag.js b/server/api/models/tag.js index 56fae1b1..7a47e7af 100644 --- a/server/api/models/tag.js +++ b/server/api/models/tag.js @@ -11,7 +11,16 @@ Tag.init({ index: true, primaryKey: true }, - weigth: { type: DataTypes.INTEGER, defaultValue: 0, allowNull: false } + weigth: { + type: DataTypes.INTEGER, + defaultValue: 0, + allowNull: false + }, + confirmed: { + type: DataTypes.BOOLEAN, + defaultValue: true, + allowNull: false + } }, { sequelize, modelName: 'tag' }) // Tag.belongsToMany(Event, { through: 'event_tags' }) diff --git a/server/migrations/20200831143500-tag_confirmation.js b/server/migrations/20200831143500-tag_confirmation.js new file mode 100644 index 00000000..df758171 --- /dev/null +++ b/server/migrations/20200831143500-tag_confirmation.js @@ -0,0 +1,13 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.addColumn('tags', 'confirmed', { + type: Sequelize.BOOLEAN, + defaultValue: true, + allowNull: false + }) + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.removeColumn('tags', 'confirmed') + } +} diff --git a/server/migrations/20200831144116-place_confirmation.js b/server/migrations/20200831144116-place_confirmation.js new file mode 100644 index 00000000..38a23b32 --- /dev/null +++ b/server/migrations/20200831144116-place_confirmation.js @@ -0,0 +1,13 @@ +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.addColumn('places', 'confirmed', { + type: Sequelize.BOOLEAN, + defaultValue: true, + allowNull: false + }) + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.removeColumn('places', 'confirmed') + } +}