import BuildSuccessEmail from "@/emails/emails/build-success"; import { db } from "@/server/db"; import { notifications } from "@/server/db/schema"; import { render } from "@react-email/components"; import { eq } from "drizzle-orm"; import { sendDiscordNotification, sendEmailNotification, sendSlackNotification, sendTelegramNotification, } from "./utils"; interface Props { projectName: string; applicationName: string; applicationType: string; buildLink: string; } export const sendBuildSuccessNotifications = async ({ projectName, applicationName, applicationType, buildLink, }: Props) => { const date = new Date(); const notificationList = await db.query.notifications.findMany({ where: eq(notifications.appDeploy, true), with: { email: true, discord: true, telegram: true, slack: true, }, }); for (const notification of notificationList) { const { email, discord, telegram, slack } = notification; if (email) { await sendEmailNotification( email, "Build success for dokploy", render( BuildSuccessEmail({ projectName, applicationName, applicationType, buildLink, date: date.toLocaleString(), }), ), ); } if (discord) { await sendDiscordNotification(discord, { title: "✅ Build Success", color: 0x00ff00, fields: [ { name: "Project", value: projectName, inline: true, }, { name: "Application", value: applicationName, inline: true, }, { name: "Type", value: applicationType, inline: true, }, { name: "Build Link", value: buildLink, }, ], timestamp: date.toISOString(), footer: { text: "Dokploy Build Notification", }, }); } if (telegram) { await sendTelegramNotification( telegram, ` ✅ Build Success Project: ${projectName} Application: ${applicationName} Type: ${applicationType} Time: ${date.toLocaleString()} Build Details: ${buildLink} `, ); } if (slack) { const { webhookUrl, channel } = slack; await sendSlackNotification(slack, { channel: channel, attachments: [ { color: "#00FF00", pretext: ":white_check_mark: *Build Success*", fields: [ { title: "Project", value: projectName, short: true, }, { title: "Application", value: applicationName, short: true, }, { title: "Type", value: applicationType, short: true, }, { title: "Time", value: date.toLocaleString(), short: true, }, { title: "Build Link", value: buildLink, }, ], actions: [ { type: "button", text: "View Build Details", url: "https://doks.dev/build-details", }, ], }, ], }); } } };