mirror of
https://github.com/hanzoai/dataroom.git
synced 2026-10-30 18:41:07 +00:00
99 lines
2.2 KiB
TypeScript
99 lines
2.2 KiB
TypeScript
import { waitUntil } from "@vercel/functions";
|
|
|
|
import prisma from "@/lib/prisma";
|
|
import { sendEmail } from "@/lib/resend";
|
|
|
|
import IntegrationInstalled from "@/components/emails/installed-integration-notification";
|
|
|
|
interface InstallIntegration {
|
|
userId: string;
|
|
teamId: string;
|
|
integrationId: string;
|
|
credentials?: Record<string, any>;
|
|
}
|
|
|
|
// Install an integration for a user in a workspace
|
|
export const installIntegration = async ({
|
|
userId,
|
|
teamId,
|
|
integrationId,
|
|
credentials,
|
|
}: InstallIntegration) => {
|
|
const installation = await prisma.installedIntegration.upsert({
|
|
create: {
|
|
userId,
|
|
teamId,
|
|
integrationId,
|
|
credentials,
|
|
},
|
|
update: {
|
|
credentials,
|
|
},
|
|
where: {
|
|
teamId_integrationId: {
|
|
teamId,
|
|
integrationId,
|
|
},
|
|
},
|
|
});
|
|
|
|
waitUntil(
|
|
(async () => {
|
|
const team = await prisma.team.findUniqueOrThrow({
|
|
where: {
|
|
id: teamId,
|
|
},
|
|
select: {
|
|
name: true,
|
|
users: {
|
|
where: { userId },
|
|
select: {
|
|
user: {
|
|
select: { email: true },
|
|
},
|
|
},
|
|
},
|
|
installedIntegrations: {
|
|
where: { integrationId },
|
|
select: {
|
|
integration: {
|
|
select: {
|
|
name: true,
|
|
slug: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
const email = team.users.length > 0 ? team.users[0].user.email : null;
|
|
const integration =
|
|
team.installedIntegrations.length > 0
|
|
? team.installedIntegrations[0].integration
|
|
: null;
|
|
|
|
if (email && integration) {
|
|
await sendEmail({
|
|
to: email,
|
|
system: true,
|
|
test: process.env.NODE_ENV === "development",
|
|
subject: `The "${integration.name}" integration has been added to your team`,
|
|
react: IntegrationInstalled({
|
|
email: email,
|
|
team: {
|
|
name: team.name,
|
|
},
|
|
integration: {
|
|
name: integration.name,
|
|
slug: integration.slug,
|
|
},
|
|
}),
|
|
});
|
|
}
|
|
})(),
|
|
);
|
|
|
|
return installation;
|
|
};
|