mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
256 lines
5.9 KiB
TypeScript
256 lines
5.9 KiB
TypeScript
import {
|
|
adminProcedure,
|
|
createTRPCRouter,
|
|
protectedProcedure,
|
|
} from "@/server/api/trpc";
|
|
import { db } from "@/server/db";
|
|
import {
|
|
apiCreateDiscord,
|
|
apiCreateEmail,
|
|
apiCreateSlack,
|
|
apiCreateTelegram,
|
|
apiFindOneNotification,
|
|
apiTestDiscordConnection,
|
|
apiTestEmailConnection,
|
|
apiTestSlackConnection,
|
|
apiTestTelegramConnection,
|
|
apiUpdateDiscord,
|
|
apiUpdateEmail,
|
|
apiUpdateSlack,
|
|
apiUpdateTelegram,
|
|
notifications,
|
|
} from "@/server/db/schema";
|
|
import {
|
|
sendDiscordNotification,
|
|
sendEmailNotification,
|
|
sendSlackNotification,
|
|
sendTelegramNotification,
|
|
} from "@/server/utils/notifications/utils";
|
|
import { TRPCError } from "@trpc/server";
|
|
import { desc } from "drizzle-orm";
|
|
import {
|
|
createDiscordNotification,
|
|
createEmailNotification,
|
|
createSlackNotification,
|
|
createTelegramNotification,
|
|
findNotificationById,
|
|
removeNotificationById,
|
|
updateDiscordNotification,
|
|
updateEmailNotification,
|
|
updateSlackNotification,
|
|
updateTelegramNotification,
|
|
} from "../services/notification";
|
|
|
|
export const notificationRouter = createTRPCRouter({
|
|
createSlack: adminProcedure
|
|
.input(apiCreateSlack)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await createSlackNotification(input);
|
|
} catch (error) {
|
|
console.log(error);
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to create the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
updateSlack: adminProcedure
|
|
.input(apiUpdateSlack)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await updateSlackNotification(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to update the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
testSlackConnection: adminProcedure
|
|
.input(apiTestSlackConnection)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
await sendSlackNotification(input, {
|
|
channel: input.channel,
|
|
text: "Hi, From Dokploy 👋",
|
|
});
|
|
return true;
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to test the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
createTelegram: adminProcedure
|
|
.input(apiCreateTelegram)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await createTelegramNotification(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to create the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
|
|
updateTelegram: adminProcedure
|
|
.input(apiUpdateTelegram)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await updateTelegramNotification(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to update the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
testTelegramConnection: adminProcedure
|
|
.input(apiTestTelegramConnection)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
await sendTelegramNotification(input, "Hi, From Dokploy 👋");
|
|
return true;
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to test the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
createDiscord: adminProcedure
|
|
.input(apiCreateDiscord)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
// go to your discord server
|
|
// go to settings
|
|
// go to integrations
|
|
// add a new integration
|
|
// select webhook
|
|
// copy the webhook url
|
|
return await createDiscordNotification(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to create the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
|
|
updateDiscord: adminProcedure
|
|
.input(apiUpdateDiscord)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await updateDiscordNotification(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to update the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
|
|
testDiscordConnection: adminProcedure
|
|
.input(apiTestDiscordConnection)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
await sendDiscordNotification(input, {
|
|
title: "Test Notification",
|
|
description: "Hi, From Dokploy 👋",
|
|
});
|
|
return true;
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to test the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
createEmail: adminProcedure
|
|
.input(apiCreateEmail)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await createEmailNotification(input);
|
|
} catch (error) {
|
|
console.log(error);
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to create the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
updateEmail: adminProcedure
|
|
.input(apiUpdateEmail)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await updateEmailNotification(input);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to update the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
testEmailConnection: adminProcedure
|
|
.input(apiTestEmailConnection)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
await sendEmailNotification(
|
|
input,
|
|
"Test Email",
|
|
"<p>Hi, From Dokploy 👋</p>",
|
|
);
|
|
return true;
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to test the notification",
|
|
cause: error,
|
|
});
|
|
}
|
|
}),
|
|
remove: adminProcedure
|
|
.input(apiFindOneNotification)
|
|
.mutation(async ({ input }) => {
|
|
try {
|
|
return await removeNotificationById(input.notificationId);
|
|
} catch (error) {
|
|
throw new TRPCError({
|
|
code: "BAD_REQUEST",
|
|
message: "Error to delete this notification",
|
|
});
|
|
}
|
|
}),
|
|
one: protectedProcedure
|
|
.input(apiFindOneNotification)
|
|
.query(async ({ input }) => {
|
|
const notification = await findNotificationById(input.notificationId);
|
|
return notification;
|
|
}),
|
|
all: adminProcedure.query(async () => {
|
|
return await db.query.notifications.findMany({
|
|
with: {
|
|
slack: true,
|
|
telegram: true,
|
|
discord: true,
|
|
email: true,
|
|
},
|
|
orderBy: desc(notifications.createdAt),
|
|
});
|
|
}),
|
|
});
|