mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
"use server"
|
|||
|
|
// src/notifications/dispatch.ts
|
||
|
|
import { eq } from 'drizzle-orm';
|
||
|
|
import { dispatchViaProvider } from './providers';
|
||
|
|
import type { EventPayload, DispatchResult } from './types';
|
||
|
|
import * as drizzleDb from "@/db";
|
||
|
|
import {db} from "@/db";
|
||
|
|
|
||
|
|
export async function dispatchNotification(
|
||
|
|
payload: EventPayload,
|
||
|
|
policyId?: string,
|
||
|
|
channelId?: string,
|
||
|
|
): Promise<DispatchResult> {
|
||
|
|
|
||
|
|
// // 1. Get policy + channel
|
||
|
|
// const policy = await db
|
||
|
|
// .select({
|
||
|
|
// policy: alertPolicies,
|
||
|
|
// channel: notificationChannels,
|
||
|
|
// })
|
||
|
|
// .from(alertPolicies)
|
||
|
|
// .innerJoin(
|
||
|
|
// notificationChannels,
|
||
|
|
// eq(alertPolicies.notificationChannelId, notificationChannels.id)
|
||
|
|
// )
|
||
|
|
// .where(eq(alertPolicies.id, policyId))
|
||
|
|
// .then((rows) => rows[0]);
|
||
|
|
//
|
||
|
|
// if (!policy) {
|
||
|
|
// return {
|
||
|
|
// success: false,
|
||
|
|
// channelId: '',
|
||
|
|
// provider: 'unknown' as any,
|
||
|
|
// error: 'Policy or channel not found',
|
||
|
|
// };
|
||
|
|
// }
|
||
|
|
//
|
||
|
|
// if (!policy.policy.enabled || !policy.channel.enabled) {
|
||
|
|
// return {
|
||
|
|
// success: false,
|
||
|
|
// channelId: policy.channel.id,
|
||
|
|
// provider: policy.channel.provider as any,
|
||
|
|
// error: 'Policy or channel is disabled',
|
||
|
|
// };
|
||
|
|
// }
|
||
|
|
|
||
|
|
if (channelId){
|
||
|
|
const channel = await db.query.notificationChannel.findFirst({
|
||
|
|
where: eq(drizzleDb.schemas.notificationChannel.id, channelId),
|
||
|
|
})
|
||
|
|
|
||
|
|
if (channel){
|
||
|
|
const config = channel.config;
|
||
|
|
|
||
|
|
const result = await dispatchViaProvider(
|
||
|
|
channel.provider as any,
|
||
|
|
config,
|
||
|
|
{ ...payload, timestamp: payload.timestamp || new Date() },
|
||
|
|
channel.id
|
||
|
|
);
|
||
|
|
|
||
|
|
return {
|
||
|
|
...result,
|
||
|
|
channelId: channel.id,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
channelId,
|
||
|
|
provider: "smtp",
|
||
|
|
error: 'Unknown error',
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|