From e2b42ee6c9fba760732f2f9b34171ac16611038c Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Sun, 4 Aug 2024 01:37:53 +0200 Subject: [PATCH] Allow free access for configuration using billing --- .../hooks/usePageChangeEffectNavigateLocation.ts | 5 +---- .../core-modules/onboarding/onboarding.module.ts | 3 ++- .../core-modules/onboarding/onboarding.service.ts | 13 +++++++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts b/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts index 5492b7b98..9fbcde4e0 100644 --- a/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts +++ b/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts @@ -6,7 +6,6 @@ import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; import { OnboardingStatus, SubscriptionStatus } from '~/generated/graphql'; import { useDefaultHomePagePath } from '~/hooks/useDefaultHomePagePath'; import { useIsMatchingLocation } from '~/hooks/useIsMatchingLocation'; -import { isDefined } from '~/utils/isDefined'; export const usePageChangeEffectNavigateLocation = () => { const isMatchingLocation = useIsMatchingLocation(); @@ -100,9 +99,7 @@ export const usePageChangeEffectNavigateLocation = () => { if ( onboardingStatus === OnboardingStatus.Completed && - isMatchingOnboardingRoute && - subscriptionStatus !== SubscriptionStatus.Canceled && - (isDefined(subscriptionStatus) || !isMatchingLocation(AppPath.PlanRequired)) + isMatchingOnboardingRoute ) { return defaultHomePagePath; } diff --git a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.module.ts b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.module.ts index 6942c6a55..b5daa947c 100644 --- a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.module.ts +++ b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.module.ts @@ -1,12 +1,13 @@ import { Module } from '@nestjs/common'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; +import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { OnboardingResolver } from 'src/engine/core-modules/onboarding/onboarding.resolver'; import { OnboardingService } from 'src/engine/core-modules/onboarding/onboarding.service'; import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars.module'; @Module({ - imports: [BillingModule, UserVarsModule], + imports: [BillingModule, UserVarsModule, FeatureFlagModule], exports: [OnboardingService], providers: [OnboardingService, OnboardingResolver], }) diff --git a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts index 1875924c1..7c2fa2406 100644 --- a/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts +++ b/packages/twenty-server/src/engine/core-modules/onboarding/onboarding.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@nestjs/common'; import { SubscriptionStatus } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; +import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; +import { IsFeatureEnabledService } from 'src/engine/core-modules/feature-flag/services/is-feature-enabled.service'; import { OnboardingStatus } from 'src/engine/core-modules/onboarding/enums/onboarding-status.enum'; import { UserVarsService } from 'src/engine/core-modules/user/user-vars/services/user-vars.service'; import { User } from 'src/engine/core-modules/user/user.entity'; @@ -26,6 +28,7 @@ export class OnboardingService { constructor( private readonly billingSubscriptionService: BillingSubscriptionService, private readonly environmentService: EnvironmentService, + private readonly isFeatureEnabledService: IsFeatureEnabledService, private readonly userVarsService: UserVarsService, ) {} @@ -36,6 +39,16 @@ export class OnboardingService { return false; } + const isFreeAccessEnabled = + await this.isFeatureEnabledService.isFeatureEnabled( + FeatureFlagKey.IsFreeAccessEnabled, + user.defaultWorkspaceId, + ); + + if (isFreeAccessEnabled) { + return false; + } + const currentBillingSubscription = await this.billingSubscriptionService.getCurrentBillingSubscription({ workspaceId: user.defaultWorkspaceId,