Files
calendar/packages/trpc/server/routers/loggedInViewer/addNotificationsSubscription.handler.ts
T
3c1297aa72 fix: calcom trpc sessio circle dep (#19893)
* fix trpc session circle dep

* fixes trpc session cirlce dep

* fix relative imports

* fix more imports to use types and not trpc

* fix exports

* Fixed types

---------

Co-authored-by: Keith Williams <keithwillcode@gmail.com>
2025-03-19 05:50:22 -03:00

69 lines
2.1 KiB
TypeScript

import { subscriptionSchema } from "@calcom/features/instant-meeting/schema";
import { sendNotification } from "@calcom/features/notifications/sendNotification";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
import { TRPCError } from "@trpc/server";
import type { TAddNotificationsSubscriptionInputSchema } from "./addNotificationsSubscription.schema";
type AddSecondaryEmailOptions = {
ctx: {
user: NonNullable<TrpcSessionUser>;
};
input: TAddNotificationsSubscriptionInputSchema;
};
const log = logger.getSubLogger({ prefix: ["[addNotificationsSubscriptionHandler]"] });
export const addNotificationsSubscriptionHandler = async ({ ctx, input }: AddSecondaryEmailOptions) => {
const { user } = ctx;
const { subscription } = input;
const parsedSubscription = subscriptionSchema.safeParse(JSON.parse(subscription));
if (!parsedSubscription.success) {
log.error("Invalid subscription", parsedSubscription.error, JSON.stringify(subscription));
throw new TRPCError({
code: "BAD_REQUEST",
message: "Invalid subscription",
});
}
const existingSubscription = await prisma.notificationsSubscriptions.findFirst({
where: { userId: user.id },
});
if (!existingSubscription) {
await prisma.notificationsSubscriptions.create({
data: { userId: user.id, subscription },
});
} else {
await prisma.notificationsSubscriptions.update({
where: { id: existingSubscription.id },
data: { userId: user.id, subscription },
});
}
// send test notification
sendNotification({
subscription: {
endpoint: parsedSubscription.data.endpoint,
keys: {
auth: parsedSubscription.data.keys.auth,
p256dh: parsedSubscription.data.keys.p256dh,
},
},
title: "Test Notification",
body: "Push Notifications activated successfully",
url: "https://app.cal.com/",
requireInteraction: false,
type: "TEST_NOTIFICATION",
});
return {
message: "Subscription added successfully",
};
};