From 3b08b718ff9b694fbfc94651ea7e0db09ec145b2 Mon Sep 17 00:00:00 2001 From: Anshuman Pandey <54475686+pandeymangg@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:14:45 +0530 Subject: [PATCH] feat: unlimited billing pages (#2777) Co-authored-by: Matti Nannt --- .../(organization)/billing/unlimited/page.tsx | 30 +++++++++++++++++++ .../billing/unlimited199/page.tsx | 30 +++++++++++++++++++ packages/lib/constants.ts | 4 ++- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited/page.tsx create mode 100644 apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited199/page.tsx diff --git a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited/page.tsx b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited/page.tsx new file mode 100644 index 0000000000..cb1a99d571 --- /dev/null +++ b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited/page.tsx @@ -0,0 +1,30 @@ +import { redirect } from "next/navigation"; +import { STRIPE_PRICE_LOOKUP_KEYS } from "@formbricks/lib/constants"; +import { getOrganizationByEnvironmentId } from "@formbricks/lib/organization/service"; +import { upgradePlanAction } from "../actions"; + +const Page = async ({ params }) => { + const organization = await getOrganizationByEnvironmentId(params.environmentId); + if (!organization) { + throw new Error("Organization not found"); + } + + const { status, newPlan, url } = await upgradePlanAction( + organization.id, + params.environmentId, + STRIPE_PRICE_LOOKUP_KEYS.UNLIMITED_99 + ); + + if (status != 200) { + throw new Error("Something went wrong"); + } + if (newPlan && url) { + redirect(url); + } else if (!newPlan) { + redirect(`/billing-confirmation?environmentId=${params.environmentId}`); + } else { + throw new Error("Something went wrong"); + } +}; + +export default Page; diff --git a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited199/page.tsx b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited199/page.tsx new file mode 100644 index 0000000000..f98744aef9 --- /dev/null +++ b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/billing/unlimited199/page.tsx @@ -0,0 +1,30 @@ +import { redirect } from "next/navigation"; +import { STRIPE_PRICE_LOOKUP_KEYS } from "@formbricks/lib/constants"; +import { getOrganizationByEnvironmentId } from "@formbricks/lib/organization/service"; +import { upgradePlanAction } from "../actions"; + +const Page = async ({ params }) => { + const organization = await getOrganizationByEnvironmentId(params.environmentId); + if (!organization) { + throw new Error("Organization not found"); + } + + const { status, newPlan, url } = await upgradePlanAction( + organization.id, + params.environmentId, + STRIPE_PRICE_LOOKUP_KEYS.UNLIMITED_199 + ); + + if (status != 200) { + throw new Error("Something went wrong"); + } + if (newPlan && url) { + redirect(url); + } else if (!newPlan) { + redirect(`/billing-confirmation?environmentId=${params.environmentId}`); + } else { + throw new Error("Something went wrong"); + } +}; + +export default Page; diff --git a/packages/lib/constants.ts b/packages/lib/constants.ts index a0ca9a6ba7..8d982dd9b1 100644 --- a/packages/lib/constants.ts +++ b/packages/lib/constants.ts @@ -193,6 +193,8 @@ export enum STRIPE_PRICE_LOOKUP_KEYS { STARTUP_YEARLY = "formbricks_startup_yearly", SCALE_MONTHLY = "formbricks_scale_monthly", SCALE_YEARLY = "formbricks_scale_yearly", + UNLIMITED_99 = "formbricks_unlimited_99", + UNLIMITED_199 = "formbricks_unlimited_199", } export const BILLING_LIMITS = { @@ -208,4 +210,4 @@ export const BILLING_LIMITS = { RESPONSES: 5000, MIU: 20000, }, -}; +} as const;