Files
calendar/packages/features/auth/signup/utils/createOrUpdateMemberships.ts
T
Hariom BalharaandGitHub a28e8ff39b fix: A user joining from invite link of a team doesn't automatically become member of the org (#12774)
* fix: Add org membership when invite link for a team in an org is generated

* Run tests sequentially till we fix emails fixture
2023-12-18 17:48:35 +05:30

62 lines
1.5 KiB
TypeScript

import type z from "zod";
import { prisma } from "@calcom/prisma";
import type { Team, User } from "@calcom/prisma/client";
import { MembershipRole } from "@calcom/prisma/enums";
import type { teamMetadataSchema } from "@calcom/prisma/zod-utils";
export const createOrUpdateMemberships = async ({
teamMetadata,
user,
team,
}: {
user: Pick<User, "id">;
team: Pick<Team, "id" | "parentId">;
teamMetadata: z.infer<typeof teamMetadataSchema>;
}) => {
return await prisma.$transaction(async (tx) => {
if (teamMetadata?.isOrganization) {
await tx.user.update({
where: {
id: user.id,
},
data: {
organizationId: team.id,
},
});
}
const membership = await tx.membership.upsert({
where: {
userId_teamId: { userId: user.id, teamId: team.id },
},
update: {
accepted: true,
},
create: {
userId: user.id,
teamId: team.id,
role: MembershipRole.MEMBER,
accepted: true,
},
});
const orgMembership = null;
if (team.parentId) {
await tx.membership.upsert({
where: {
userId_teamId: { userId: user.id, teamId: team.parentId },
},
update: {
accepted: true,
},
create: {
userId: user.id,
teamId: team.parentId,
role: MembershipRole.MEMBER,
accepted: true,
},
});
}
return { membership, orgMembership };
});
};