From bed329cd8c87fc97f57a8e353b7c29168043177a Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Fri, 4 Jun 2021 03:10:41 +0200 Subject: [PATCH] Using bulk insert utility for alert notifications to prevent duplicate errors. --- migrations/20190325001339_releases.js | 3 ++- src/alerts.js | 20 +++++++++----------- src/utils/qu.js | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/migrations/20190325001339_releases.js b/migrations/20190325001339_releases.js index be6a8c78..7462c42b 100644 --- a/migrations/20190325001339_releases.js +++ b/migrations/20190325001339_releases.js @@ -910,7 +910,8 @@ exports.up = knex => Promise.resolve() table.text('media_id', 21) .notNullable() .references('id') - .inTable('media'); + .inTable('media') + .onDelete('cascade'); table.unique('movie_id'); })) diff --git a/src/alerts.js b/src/alerts.js index 9f465bc9..8e1213d9 100644 --- a/src/alerts.js +++ b/src/alerts.js @@ -1,6 +1,7 @@ 'use strict'; const knex = require('./knex'); +const bulkInsert = require('./utils/bulk-insert'); const { HttpError } = require('./errors'); async function addAlert(alert, sessionUser) { @@ -21,25 +22,22 @@ async function addAlert(alert, sessionUser) { .returning('id'); await Promise.all([ - alert.actors?.length > 0 && knex('alerts_actors') - .insert(alert.actors.map(actorId => ({ + alert.actors?.length > 0 && bulkInsert('alerts_actors', alert.actors.map(actorId => ({ alert_id: alertId, actor_id: actorId, - }))), - alert.tags?.length > 0 && knex('alerts_tags') - .insert(alert.tags.map(tagId => ({ + })), false), + alert.tags?.length > 0 && bulkInsert('alerts_tags', alert.tags.map(tagId => ({ alert_id: alertId, tag_id: tagId, - }))), - alert.stashes?.length > 0 && knex('alerts_stashes') - .insert(alert.stashes.map(stashId => ({ + })), false), + alert.stashes?.length > 0 && bulkInsert('alerts_stashes', alert.stashes.map(stashId => ({ alert_id: alertId, stash_id: stashId, - }))), - alert.entity && knex('alerts_entities').insert({ + })), false), + alert.entity && bulkInsert('alerts_entities', [{ alert_id: alertId, entity_id: alert.entity, - }), + }], false), ]); return alertId; diff --git a/src/utils/qu.js b/src/utils/qu.js index 08c49c62..314f425c 100644 --- a/src/utils/qu.js +++ b/src/utils/qu.js @@ -130,6 +130,28 @@ function html(context, selector) { return el && el.innerHTML; } +function json(context, selector) { + const el = q(context, selector, null, true); + + try { + return JSON.parse(el?.innerHTML); + } catch (error) { + return null; + } +} + +function jsons(context, selector) { + const els = all(context, selector, null, true); + + return els.map((el) => { + try { + return JSON.parse(el?.innerHTML); + } catch (error) { + return null; + } + }); +} + function htmls(context, selector) { const els = all(context, selector, null, true); @@ -402,6 +424,8 @@ const quFuncs = { images, img: image, imgs: images, + json, + jsons, length: duration, meta, num: number,