From f12b13c40f16f151671dcf54526558d754a163f8 Mon Sep 17 00:00:00 2001 From: les Date: Mon, 31 Aug 2020 16:43:13 +0200 Subject: [PATCH 1/5] schema migration --- .../migrations/20200831143500-tag_confirmation.js | 13 +++++++++++++ .../migrations/20200831144116-place_confirmation.js | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 server/migrations/20200831143500-tag_confirmation.js create mode 100644 server/migrations/20200831144116-place_confirmation.js 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') + } +} From f73168ae9e10e9f85da7bbb09b9017af36f36c2b Mon Sep 17 00:00:00 2001 From: les Date: Mon, 31 Aug 2020 16:44:03 +0200 Subject: [PATCH 2/5] add `confirmed` field in schema --- server/api/models/place.js | 7 ++++++- server/api/models/tag.js | 11 ++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) 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' }) From f9f29154a2c428b3b6e893360ea63ed5771829b4 Mon Sep 17 00:00:00 2001 From: les Date: Mon, 31 Aug 2020 16:47:33 +0200 Subject: [PATCH 3/5] confirm tag/place only if auth --- server/api/controller/event.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/api/controller/event.js b/server/api/controller/event.js index ea96b2f8..9d739df4 100644 --- a/server/api/controller/event.js +++ b/server/api/controller/event.js @@ -277,7 +277,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 +288,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) From 847801033f3c83aed28ff2e7e803d568ba8f6800 Mon Sep 17 00:00:00 2001 From: les Date: Mon, 31 Aug 2020 16:51:12 +0200 Subject: [PATCH 4/5] get confirmed tag/place only --- server/api/controller/event.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/api/controller/event.js b/server/api/controller/event.js index 9d739df4..bbd14a40 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: { From 3e49dd91317b64e2b8c90b0fb54fc4b8de214304 Mon Sep 17 00:00:00 2001 From: les Date: Mon, 31 Aug 2020 17:38:49 +0200 Subject: [PATCH 5/5] fix #86 confirm tag/place when event is confirmed --- server/api/controller/event.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/server/api/controller/event.js b/server/api/controller/event.js index bbd14a40..45246bf7 100644 --- a/server/api/controller/event.js +++ b/server/api/controller/event.js @@ -163,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) @@ -171,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)