From 043b98fd49740818f149ba07f1c0a582640788d4 Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Mon, 13 Jul 2026 05:28:26 +0200 Subject: [PATCH] Added scene alert view. --- migrations/20260713052703_scene_alerts.js | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 migrations/20260713052703_scene_alerts.js diff --git a/migrations/20260713052703_scene_alerts.js b/migrations/20260713052703_scene_alerts.js new file mode 100644 index 00000000..9ecf09ef --- /dev/null +++ b/migrations/20260713052703_scene_alerts.js @@ -0,0 +1,29 @@ +exports.up = async function(knex) { + await knex.schema.createMaterializedView('alerts_users_scenes', (view) => { + view.columns('user_id', 'scene_id', 'alert_ids'); + + view.as( + knex('alerts_scenes') + .select( + 'alerts.user_id', + 'alerts_scenes.scene_id', + knex.raw('array_agg(distinct alerts.id) as alert_ids'), + knex.raw('(alerts_tags.id is null and alerts_entities.id is null and alerts_matches.id is null and related_scenes.id is null) as is_only'), + ) + .leftJoin('alerts', 'alerts.id', 'alerts_scenes.alert_id') + .leftJoin('alerts_entities', 'alerts_entities.alert_id', 'alerts_scenes.alert_id') + .leftJoin('alerts_tags', 'alerts_tags.alert_id', 'alerts_scenes.alert_id') + .leftJoin('alerts_matches', 'alerts_matches.alert_id', 'alerts_scenes.alert_id') + .leftJoin('alerts_scenes as related_scenes', (joinBuilder) => { + joinBuilder + .on('related_scenes.alert_id', 'alerts_scenes.alert_id') + .on('related_scenes.scene_id', '!=', 'alerts_scenes.scene_id'); + }) + .groupBy(['user_id', 'alerts_scenes.scene_id', 'is_only']), + ); + }); +}; + +exports.down = async function(knex) { + await knex.schema.dropView('alerts_users_scenes'); +};