feat: make billing page functional

This commit is contained in:
Mythie
2023-08-24 13:32:57 +10:00
parent 5cba252627
commit c3f11afaf9
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;
};

View File

@ -3,7 +3,7 @@
"version": "1.0.0",
"main": "./index.ts",
"types": "./index.ts",
"license": "MIT",
"license": "SEE LICENSE IN LICENSE.md",
"files": [
"client-only/",
"server-only/",

View File

@ -0,0 +1,15 @@
'use server';
import { prisma } from '@documenso/prisma';
export type GetSubscriptionByUserIdOptions = {
userId: number;
};
export const getSubscriptionByUserId = ({ userId }: GetSubscriptionByUserIdOptions) => {
return prisma.subscription.findFirst({
where: {
userId,
},
});
};