From a8e11ebef75243bb3a3724f364a6aad0d5ed5fb7 Mon Sep 17 00:00:00 2001 From: charles-gauthereau Date: Wed, 25 Mar 2026 22:19:41 +0100 Subject: [PATCH] feat: set default notification channel --- src/db/schema/01_setting.ts | 1 + src/features/notifications/helpers.ts | 52 +++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/src/db/schema/01_setting.ts b/src/db/schema/01_setting.ts index 20c72638..f3288790 100644 --- a/src/db/schema/01_setting.ts +++ b/src/db/schema/01_setting.ts @@ -26,6 +26,7 @@ export const setting = pgTable("settings", { export const settingRelations = relations(setting, ({one, many}) => ({ storageChannel: one(storageChannel, {fields: [setting.defaultStorageChannelId], references: [storageChannel.id]}), + notificationChannel: one(notificationChannel, {fields: [setting.defaultNotificationChannelId], references: [notificationChannel.id]}), })); diff --git a/src/features/notifications/helpers.ts b/src/features/notifications/helpers.ts index 1f57c573..a3fe6ea4 100644 --- a/src/features/notifications/helpers.ts +++ b/src/features/notifications/helpers.ts @@ -1,17 +1,55 @@ import { DatabaseWith } from "@/db/schema/07_database"; import { EventKind, EventPayload } from "@/features/notifications/types"; import { dispatchNotification } from "@/features/notifications/dispatch"; +import {db} from "@/db"; +import {eq} from "drizzle-orm"; +import * as drizzleDb from "@/db"; export async function sendNotificationsBackupRestore(database: DatabaseWith, event: EventKind) { - if (!database.alertPolicies || database.alertPolicies.length === 0) { + // if (!database.alertPolicies || database.alertPolicies.length === 0) { + // return []; + // } + // + // const activePolicies = database.alertPolicies.filter(policy => + // policy.enabled && policy.eventKinds.includes(event) + // ); + // + // const settings = await db.query.setting.findFirst({ + // where: eq(drizzleDb.schemas.setting.name, "system"), + // with: {notificationChannel: true}, + // }); + // + // const defaultPolicy = settings?.notificationChannel + // ? [{ + // id: null, + // notificationChannelId: settings.notificationChannel.id, + // enabled: settings.notificationChannel.enabled, + // }] + // : []; + + + const settings = await db.query.setting.findFirst({ + where: eq(drizzleDb.schemas.setting.name, "system"), + with: { notificationChannel: true }, + }); + + const defaultPolicy = settings?.notificationChannel + ? [{ + id: null, + notificationChannelId: settings.notificationChannel.id, + enabled: settings.notificationChannel.enabled, + }] + : []; + + const policiesToUse = (database.alertPolicies && database.alertPolicies.length > 0) + ? database.alertPolicies.filter(policy => policy.enabled && policy.eventKinds.includes(event)) + : defaultPolicy; + + if (!policiesToUse || policiesToUse.length === 0) { return []; } - const activePolicies = database.alertPolicies.filter(policy => - policy.enabled && policy.eventKinds.includes(event) - ); - - const promises = activePolicies.map(alertPolicy => { + const promises = policiesToUse.map(alertPolicy => { const date = new Date(); let level: "info" | "critical" = "info"; let message = ""; @@ -56,7 +94,7 @@ export async function sendNotificationsBackupRestore(database: DatabaseWith, eve }, }; - return dispatchNotification(payload, alertPolicy.id, undefined, undefined); + return dispatchNotification(payload, alertPolicy.id == null ? undefined : alertPolicy.id, alertPolicy.id ? undefined : alertPolicy.notificationChannelId, undefined); });