diff --git a/ee/pages/api/integrations/stripepayment/portal.ts b/ee/pages/api/integrations/stripepayment/portal.ts index 17c68085c8..759a985d5b 100644 --- a/ee/pages/api/integrations/stripepayment/portal.ts +++ b/ee/pages/api/integrations/stripepayment/portal.ts @@ -1,3 +1,4 @@ +import { Prisma } from "@prisma/client"; import type { NextApiRequest, NextApiResponse } from "next"; import stripe from "@ee/lib/stripe/server"; @@ -23,6 +24,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) select: { email: true, name: true, + metadata: true, }, }); @@ -31,26 +33,29 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) message: "User email not found", }); - /** - * TODO: We need to find a better way to get our users customer id from Stripe, - * since the email is not an unique field in Stripe and we don't save them - * in our DB as of now. - **/ - const customersReponse = await stripe.customers.list({ - email: user?.email || "", - limit: 1, - }); + let customerId = ""; - const [customer] = customersReponse.data; + if (user?.metadata && typeof user.metadata === "object" && "stripeCustomerId" in user.metadata) { + customerId = (user?.metadata as Prisma.JsonObject).stripeCustomerId as string; + } else { + /* We fallback to finding the customer by email (which is not optimal) */ + const customersReponse = await stripe.customers.list({ + email: user.email, + limit: 1, + }); + if (customersReponse.data[0]?.id) { + customerId = customersReponse.data[0].id; + } + } - if (!customer?.id) + if (!customerId) return res.status(404).json({ message: "Stripe customer id not found", }); const return_url = `${process.env.BASE_URL}/settings/billing`; const stripeSession = await stripe.billingPortal.sessions.create({ - customer: customer.id, + customer: customerId, return_url, }); diff --git a/pages/success.tsx b/pages/success.tsx index d5028ed6fa..dac92ce9e2 100644 --- a/pages/success.tsx +++ b/pages/success.tsx @@ -64,7 +64,7 @@ export default function Success(props: inferSSRProps) const event = createEvent({ start: [ date.toDate().getUTCFullYear(), - date.toDate().getUTCMonth(), + (date.toDate().getUTCMonth() as number) + 1, date.toDate().getUTCDate(), date.toDate().getUTCHours(), date.toDate().getUTCMinutes(),