Billing - fix duplicate customer in stripe + subscription constraint violation (#13091)

closes https://github.com/twentyhq/core-team-issues/issues/982
This commit is contained in:
Etienne
2025-07-08 11:17:59 +02:00
committed by GitHub
parent 67f0b98002
commit 56607c0449
7 changed files with 25 additions and 6 deletions

View File

@ -1,5 +1,4 @@
import { useRedirect } from '@/domain-manager/hooks/useRedirect';
import { SettingsPath } from '@/types/SettingsPath';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { t } from '@lingui/core/macro';
import { useState } from 'react';
@ -8,16 +7,17 @@ import {
SubscriptionInterval,
useCheckoutSessionMutation,
} from '~/generated-metadata/graphql';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
export const useHandleCheckoutSession = ({
recurringInterval,
plan,
requirePaymentMethod,
successUrlPath,
}: {
recurringInterval: SubscriptionInterval;
plan: BillingPlanKey;
requirePaymentMethod: boolean;
successUrlPath: string;
}) => {
const { redirect } = useRedirect();
@ -32,7 +32,7 @@ export const useHandleCheckoutSession = ({
const { data } = await checkoutSession({
variables: {
recurringInterval,
successUrlPath: getSettingsPath(SettingsPath.Billing),
successUrlPath,
plan,
requirePaymentMethod,
},

View File

@ -2,14 +2,17 @@ import { BILLING_CHECKOUT_SESSION_DEFAULT_VALUE } from '@/billing/constants/Bill
import { useHandleCheckoutSession } from '@/billing/hooks/useHandleCheckoutSession';
import { InformationBanner } from '@/information-banner/components/InformationBanner';
import { useSettingsPermissionMap } from '@/settings/roles/hooks/useSettingsPermissionMap';
import { SettingsPath } from '@/types/SettingsPath';
import { t } from '@lingui/core/macro';
import { SettingPermissionType } from '~/generated-metadata/graphql';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
export const InformationBannerNoBillingSubscription = () => {
const { handleCheckoutSession, isSubmitting } = useHandleCheckoutSession({
recurringInterval: BILLING_CHECKOUT_SESSION_DEFAULT_VALUE.interval,
plan: BILLING_CHECKOUT_SESSION_DEFAULT_VALUE.plan,
requirePaymentMethod: true,
successUrlPath: getSettingsPath(SettingsPath.Billing),
});
const { [SettingPermissionType.WORKSPACE]: hasPermissionToSubscribe } =