From 919075f192d9dfd983dcadcb74a32e65fcaddbaf Mon Sep 17 00:00:00 2001 From: lesion Date: Fri, 14 Jan 2022 10:59:27 +0100 Subject: [PATCH] export feed / api with inclusive tags or places --- server/api/controller/event.js | 15 ++++++--------- server/api/controller/export.js | 27 ++++++++++++++++----------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/server/api/controller/event.js b/server/api/controller/event.js index f1822728..9469a9c7 100644 --- a/server/api/controller/event.js +++ b/server/api/controller/event.js @@ -504,14 +504,12 @@ const eventController = { where.start_datetime = { [Op.lte]: end } } - if (places) { - where.placeId = places.split(',') - } - - let where_tags = {} - if (tags) { - where_tags = { where: { [Op.or]: { tag: tags.split(',') } } } - } + if (places || tags) { + where[Op.or] = { + placeId: places ? places.split(',') : [], + '$tags.tag$': tags ? tags.split(',') : [] + } + } const events = await Event.findAll({ where, @@ -526,7 +524,6 @@ const eventController = { order: [Sequelize.literal('(SELECT COUNT("tagTag") FROM event_tags WHERE tagTag = tag) DESC')], attributes: ['tag'], required: !!tags, - ...where_tags, through: { attributes: [] } }, { model: Place, required: true, attributes: ['id', 'name', 'address'] } diff --git a/server/api/controller/export.js b/server/api/controller/export.js index b8616557..7850c4f3 100644 --- a/server/api/controller/export.js +++ b/server/api/controller/export.js @@ -2,7 +2,7 @@ const Event = require('../models/event') const Place = require('../models/place') const Tag = require('../models/tag') -const { Op } = require('sequelize') +const { Op, literal } = require('sequelize') const moment = require('dayjs') const ics = require('ics') @@ -16,16 +16,13 @@ const exportController = { const where = {} const yesterday = moment().subtract('1', 'day').unix() - let where_tags = {} - - if (tags) { - where_tags = { where: { tag: tags.split(',') } } - } - - if (places) { - where.placeId = places.split(',') - } + if (places || tags) { + where[Op.or] = { + placeId: places ? places.split(',') : [], + '$tags.tag$': tags ? tags.split(',') : [] + } + } if (!show_recurrent) { where.parentId = null } @@ -39,7 +36,15 @@ const exportController = { start_datetime: { [Op.gte]: yesterday }, ...where }, - include: [{ model: Tag, required: false, ...where_tags }, { model: Place, attributes: ['name', 'id', 'address'] }] + include: [ + { + model: Tag, + order: [literal('(SELECT COUNT("tagTag") FROM event_tags WHERE tagTag = tag) DESC')], + attributes: ['tag'], + required: !!tags, + through: { attributes: [] } + }, + { model: Place, attributes: ['name', 'id', 'address'] }] }) switch (type) {