From 03bc8db64a6075233085985dec92c53d1dbbc16f Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Sun, 7 Sep 2025 22:02:56 -0400 Subject: [PATCH] refactor: Remove StripeService from `@calcom/lib` and define it in `@calcom/trpc` (#23655) * remove packages/lib/server/stripe * simplify metadata * define business logic directly in trpc handler --- .../app/(use-page-wrapper)/auth/verify/page.tsx | 14 ++------------ .../ee/payments/server/stripe-service.ts} | 14 ++++++-------- .../publicViewer/stripeCheckoutSession.handler.ts | 7 +++++-- 3 files changed, 13 insertions(+), 22 deletions(-) rename packages/{lib/server/service/stripe.ts => features/ee/payments/server/stripe-service.ts} (79%) diff --git a/apps/web/app/(use-page-wrapper)/auth/verify/page.tsx b/apps/web/app/(use-page-wrapper)/auth/verify/page.tsx index 4821569416..69abee13b8 100644 --- a/apps/web/app/(use-page-wrapper)/auth/verify/page.tsx +++ b/apps/web/app/(use-page-wrapper)/auth/verify/page.tsx @@ -2,8 +2,6 @@ import type { PageProps as _PageProps } from "app/_types"; import { _generateMetadata } from "app/_utils"; import { z } from "zod"; -import { StripeService } from "@calcom/lib/server/service/stripe"; - import VerifyPage from "~/auth/verify-view"; const querySchema = z.object({ @@ -14,18 +12,10 @@ const querySchema = z.object({ export const generateMetadata = async ({ params, searchParams }: _PageProps) => { const p = { ...(await params), ...(await searchParams) }; - const { sessionId, stripeCustomerId } = querySchema.parse(p); - - const data = await StripeService.getCheckoutSession({ - stripeCustomerId, - checkoutSessionId: sessionId, - }); - - const { hasPaymentFailed } = data; + const { sessionId } = querySchema.parse(p); return await _generateMetadata( - () => - hasPaymentFailed ? "Your payment failed" : sessionId ? "Payment successful!" : `Verify your email`, + () => (sessionId ? "Payment Page" : `Verify your email`), () => "", undefined, undefined, diff --git a/packages/lib/server/service/stripe.ts b/packages/features/ee/payments/server/stripe-service.ts similarity index 79% rename from packages/lib/server/service/stripe.ts rename to packages/features/ee/payments/server/stripe-service.ts index 6a42e33a94..251cda52ba 100644 --- a/packages/lib/server/service/stripe.ts +++ b/packages/features/ee/payments/server/stripe-service.ts @@ -1,16 +1,14 @@ import stripe from "@calcom/features/ee/payments/server/stripe"; -import { - ZStripeCheckoutSessionInputSchema, - type TStripeCheckoutSessionInputSchema, -} from "@calcom/trpc/server/routers/publicViewer/stripeCheckoutSession.schema"; + +type StripeCheckoutSessionInput = { + checkoutSessionId?: string; + stripeCustomerId?: string; +}; export class StripeService { - static async getCheckoutSession(input: TStripeCheckoutSessionInputSchema) { + static async getCheckoutSession(input: StripeCheckoutSessionInput) { const { checkoutSessionId, stripeCustomerId } = input; - // Moved the following data checks to superRefine - ZStripeCheckoutSessionInputSchema.parse(input); - let customerId: string; let isPremiumUsername = false; let hasPaymentFailed = false; diff --git a/packages/trpc/server/routers/publicViewer/stripeCheckoutSession.handler.ts b/packages/trpc/server/routers/publicViewer/stripeCheckoutSession.handler.ts index 07e8eb43ec..9f1a0375b2 100644 --- a/packages/trpc/server/routers/publicViewer/stripeCheckoutSession.handler.ts +++ b/packages/trpc/server/routers/publicViewer/stripeCheckoutSession.handler.ts @@ -1,5 +1,6 @@ -import { StripeService } from "@calcom/lib/server/service/stripe"; +import { StripeService } from "@calcom/features/ee/payments/server/stripe-service"; +import { ZStripeCheckoutSessionInputSchema } from "./stripeCheckoutSession.schema"; import type { TStripeCheckoutSessionInputSchema } from "./stripeCheckoutSession.schema"; type StripeCheckoutSessionOptions = { @@ -7,7 +8,9 @@ type StripeCheckoutSessionOptions = { }; export const stripeCheckoutSessionHandler = async ({ input }: StripeCheckoutSessionOptions) => { - return await StripeService.getCheckoutSession(input); + const parsedInput = ZStripeCheckoutSessionInputSchema.parse(input); + + return await StripeService.getCheckoutSession(parsedInput); }; export default stripeCheckoutSessionHandler;