feat: make billing page functional

This commit is contained in:
Mythie
2023-08-24 13:32:57 +10:00
parent fead48c2f0
commit bfe0d50661
5 changed files with 68 additions and 1 deletions

View File

@ -0,0 +1 @@
<!-- This is a stub -->

View File

@ -0,0 +1,32 @@
import { prisma } from '@documenso/prisma';
import { User } from '@documenso/prisma/client';
import { stripe } from '../../server-only/stripe';
import { getSubscriptionByUserId } from '../../server-only/subscription/get-subscription-by-user-id';
export type CreateCustomerOptions = {
user: User;
};
export const createCustomer = async ({ user }: CreateCustomerOptions) => {
const existingSubscription = await getSubscriptionByUserId({ userId: user.id });
if (existingSubscription) {
throw new Error('User already has a subscription');
}
const customer = await stripe.customers.create({
name: user.name ?? undefined,
email: user.email,
metadata: {
userId: user.id,
},
});
return await prisma.subscription.create({
data: {
userId: user.id,
customerId: customer.id,
},
});
};

View File

@ -0,0 +1,19 @@
'use server';
import { stripe } from '../../server-only/stripe';
export type GetPortalSessionOptions = {
customerId: string;
returnUrl: string;
};
export const getPortalSession = async ({ customerId, returnUrl }: GetPortalSessionOptions) => {
'use server';
const session = await stripe.billingPortal.sessions.create({
customer: customerId,
return_url: returnUrl,
});
return session.url;
};