Files
calendar/packages/features/ee/dsync/lib/users/createUsersAndConnectToOrg.ts
T
+1 1b5d50c45c feat: SCIM Group Provisioning To Teams Within An Org (#13850)
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Kiran K <mailtokirankk@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: zomars <zomars@me.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
2024-03-07 16:16:53 -07:00

65 lines
1.7 KiB
TypeScript

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 dSyncUserSelect from "./dSyncUserSelect";
const createUsersAndConnectToOrg = async ({
emailsToCreate,
org,
}: {
emailsToCreate: string[];
org: Awaited<ReturnType<typeof getTeamOrThrow>>;
}) => {
const orgId = org.id;
// As of Mar 2024 Prisma createMany does not support nested creates and returning created records
await prisma.user.createMany({
data: emailsToCreate.map((email) => {
const [emailUser, emailDomain] = email.split("@");
const username = slugify(`${emailUser}-${emailDomain.split(".")[0]}`);
return {
username,
email,
// Assume verified since coming from directory
verified: true,
invitedTo: orgId,
organizationId: orgId,
};
}),
});
const users = await prisma.user.findMany({
where: {
email: {
in: emailsToCreate,
},
},
select: dSyncUserSelect,
});
await prisma.membership.createMany({
data: users.map((user) => ({
userId: user.id,
teamId: orgId,
role: MembershipRole.MEMBER,
})),
});
await prisma.profile.createMany({
data: users.map((user) => ({
uid: ProfileRepository.generateProfileUid(),
userId: user.id,
// The username is already set when creating the user
username: user.username!,
organizationId: orgId,
})),
});
return users;
};
export default createUsersAndConnectToOrg;