feat: wip

This commit is contained in:
David Nguyen
2023-12-27 13:04:24 +11:00
parent f7cf33c61b
commit 9d626473c8
140 changed files with 9604 additions and 536 deletions

View File

@ -0,0 +1,86 @@
import type Stripe from 'stripe';
import { transferTeamSubscription } from '@documenso/ee/server-only/stripe/transfer-team-subscription';
import { mapStripeSubscriptionToPrismaUpsertAction } from '@documenso/ee/server-only/stripe/webhook/on-subscription-updated';
import { IS_BILLING_ENABLED } from '@documenso/lib/constants/app';
import { prisma } from '@documenso/prisma';
import { TeamMemberRole } from '@documenso/prisma/client';
export type TransferTeamOwnershipOptions = {
token: string;
};
export const transferTeamOwnership = async ({ token }: TransferTeamOwnershipOptions) => {
await prisma.$transaction(async (tx) => {
const teamTransferVerification = await tx.teamTransferVerification.findFirstOrThrow({
where: {
token,
},
include: {
team: true,
},
});
const { team, userId: newOwnerUserId } = teamTransferVerification;
await tx.teamTransferVerification.deleteMany({
where: {
teamId: team.id,
},
});
const newOwnerUser = await tx.user.findFirstOrThrow({
where: {
id: newOwnerUserId,
},
include: {
Subscription: true,
},
});
let newTeamSubscription: Stripe.Subscription | null = null;
if (IS_BILLING_ENABLED) {
newTeamSubscription = await transferTeamSubscription({
user: newOwnerUser,
team,
});
}
if (newTeamSubscription) {
await tx.subscription.upsert(
mapStripeSubscriptionToPrismaUpsertAction(newOwnerUser.id, newTeamSubscription),
);
}
// Todo: Teams - Add billing message in email indicating that billing will be passed on when transferring a team.
await tx.team.update({
where: {
id: team.id,
members: {
some: {
userId: newOwnerUserId,
},
},
},
data: {
ownerUserId: newOwnerUserId,
subscriptionId: newTeamSubscription?.id ?? null,
members: {
update: {
where: {
userId_teamId: {
teamId: team.id,
userId: newOwnerUserId,
},
},
data: {
role: TeamMemberRole.ADMIN,
},
},
},
},
});
});
};