diff --git a/apps/web/src/app/api/user/verify-email-change/route.ts b/apps/web/src/app/api/user/verify-email-change/route.ts index b941013e9..9ed194f63 100644 --- a/apps/web/src/app/api/user/verify-email-change/route.ts +++ b/apps/web/src/app/api/user/verify-email-change/route.ts @@ -1,4 +1,6 @@ +import { stripe } from "@rallly/billing"; import { prisma } from "@rallly/database"; +import * as Sentry from "@sentry/nextjs"; import { cookies } from "next/headers"; import type { NextRequest } from "next/server"; import { NextResponse } from "next/server"; @@ -33,11 +35,24 @@ const handleEmailChange = async (token: string) => { return false; } - await prisma.user.update({ + const user = await prisma.user.update({ where: { email: payload.fromEmail }, data: { email: payload.toEmail }, + select: { + customerId: true, + }, }); + try { + if (user.customerId) { + await stripe.customers.update(user.customerId, { + email: payload.toEmail, + }); + } + } catch (error) { + Sentry.captureException(error); + } + setEmailChangeCookie("success"); return true; diff --git a/apps/web/src/trpc/routers/user.ts b/apps/web/src/trpc/routers/user.ts index fd6020666..9d8bfdade 100644 --- a/apps/web/src/trpc/routers/user.ts +++ b/apps/web/src/trpc/routers/user.ts @@ -107,8 +107,8 @@ export const user = router({ return { success: true }; }), requestEmailChange: privateProcedure - .use(createRateLimitMiddleware("request_email_change", 10, "1 h")) .input(z.object({ email: z.string().email() })) + .use(createRateLimitMiddleware("request_email_change", 5, "1 h")) .mutation(async ({ input, ctx }) => { const currentUser = await prisma.user.findUnique({ where: { id: ctx.user.id },