2
0
Files
cal/calcom/packages/features/ee/dsync/lib/createUserAndInviteToOrg.ts

68 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

2024-08-09 00:39:27 +02:00
import type { TFunction } from "next-i18next";
import { ProfileRepository } from "@calcom/lib/server/repository/profile";
import slugify from "@calcom/lib/slugify";
import prisma from "@calcom/prisma";
import { MembershipRole } from "@calcom/prisma/enums";
import type { getTeamOrThrow } from "@calcom/trpc/server/routers/viewer/teams/inviteMember/utils";
import { sendSignupToOrganizationEmail } from "@calcom/trpc/server/routers/viewer/teams/inviteMember/utils";
const createUserAndInviteToOrg = async ({
userEmail,
org,
translation,
}: {
userEmail: string;
org: Awaited<ReturnType<typeof getTeamOrThrow>>;
translation: TFunction;
}) => {
const orgId = org.id;
const [emailUser, emailDomain] = userEmail.split("@");
const username = slugify(`${emailUser}-${emailDomain.split(".")[0]}`);
await prisma.user.create({
data: {
username,
email: userEmail,
// name: event.data?.givenName,
// Assume verified since coming from directory
verified: true,
invitedTo: orgId,
organizationId: orgId,
teams: {
create: {
teamId: orgId,
role: MembershipRole.MEMBER,
accepted: true,
},
},
profiles: {
createMany: {
data: [
{
uid: ProfileRepository.generateProfileUid(),
username,
organizationId: orgId,
},
],
},
},
},
});
await sendSignupToOrganizationEmail({
usernameOrEmail: userEmail,
team: org,
translation,
inviterName: org.name,
input: {
teamId: orgId,
role: MembershipRole.MEMBER,
usernameOrEmail: userEmail,
language: "en",
isOrg: true,
},
});
};
export default createUserAndInviteToOrg;